首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

fopen循环时,老是返回空指针

2013-04-20 
fopen循环时,总是返回空指针本帖最后由 sx666777888 于 2013-04-05 19:18:45 编辑我用fopen循环读取文件夹

fopen循环时,总是返回空指针
本帖最后由 sx666777888 于 2013-04-05 19:18:45 编辑 我用fopen循环读取文件夹内的视频文件时候,第一次循环可以成功,可是第二次循环就失败了,返回NULL,但是文件都是存在的啊,权限也都正确,不知道错在哪了?

char src_dir[60]="/home/wst/sx/probe";
char des_dir[60];
dp=opendir(src_dir);
if(dp==NULL)
    {
     printf("open directory error.\n");
     return 1;
    }
 chdir(src_dir);
 sprintf(des_dir,"%s_tmp",src_dir);
 mkdir(des_dir,0);
 while((dirp=readdir(dp))!=NULL)
   {
    if( (strcmp(dirp->d_name,".")==0) || (strcmp(dirp->d_name,"..")==0) || (strcmp(dirp->d_name,"lost+found")==0)  )
               {
        continue;
        }
    src_fp=fopen(dirp->d_name,"rb+");  。。。。。。错在这里,一直返回NULL

    if(src_fp==NULL)
        {
    printf("can not open file %s/%s\n",src_dir,dirp->d_name);
perror("fopen");
    closedir(dp);
    return 1;
  
        }



sprintf(des_dir,"%s/%s",des_dir,dirp->d_name);
des_fp=fopen(des_dir,"w+");
if(des_fp==NULL)
    {
    printf("can not open file %s/%s\n",src_dir,dirp->d_name);
fclose(src_fp);
    closedir(dp);
    return 1;
    }
if(flock(fileno(des_fp),LOCK_EX) != 0)
        {
        printf("wrong lock\n");  
        }



memset(buf,0,MAX_BUFFER_SIZE);
total_size=0;


while((read_size=fread(buf,1,MAX_BUFFER_SIZE,src_fp))>0)
    {

        write_size=fwrite(buf,1,read_size,des_fp);
    memset(buf,0,MAX_BUFFER_SIZE);
//printf("write_size=%d\n",write_size);
total_size+=write_size;
if(write_size!=read_size)
{
printf("write file(%s/%s) size is something wrong!\n",src_dir,dirp->d_name);
fclose(src_fp);
fclose(des_fp);
 fprintf(stderr, "%s \n", strerror(errno));
closedir(dp);
return 1;
}
        }

if(flock(fileno(des_fp),LOCK_UN) != 0)
        {
        printf("the file was not unlock\n");
        }
   fclose(src_fp);
        printf("close error\n");
    src_fp=NULL;
    fclose(des_fp);
    des_fp=NULL;
//remove(dirp->d_name);
printf("send file %s/%s  fsize=%d\n",src_dir,dirp->d_name,total_size);

}
return 0;
}


输出:
send file /home/wst/sx/probe/qeq.mp4  fsize=11823236
can not open file /home/wst/sx/probe/qw.mp4


[解决办法]
sprintf(des_dir,"%s/%s",des_dir,dirp->d_name);
des_fp=fopen(des_dir,"w+");

sprintf(des_dir,"%s//%s",des_dir,dirp->d_name);
des_fp=fopen(des_dir,"w+");


[解决办法]
循环打开同一个文件?这可以么?!
[解决办法]
获取一下失败原因,或者是路径下,没有这个文件,或者是权限不允许~你单步调试看看,到底是什么原因~
[解决办法]
看看返回什么错误

热点排行