读书人

fopen循环时老是返回空指针

发布时间: 2013-04-20 19:43:01 作者: rapoo

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+");


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

读书人网 >C语言

热点推荐