| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 700 人关注过本帖
标题:到底错在哪??
只看楼主 加入收藏
轉身已陌路
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2014-12-25
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:11 
到底错在哪??
程序代码:
void fileOperate_rw(){


    char path_1[100] = "D:\\desktop\\第1讲 6.2-6.2.5不局限内存-文件.mp4";
    char path_2[100] = "D:\\desktop\\2.mp4";

    FILE* pfa = fopen(path_1,"rb");
    FILE* pfb = fopen(path_2,"wb");

    if(pfa == NULL && pfb == NULL){
        printf("error,file not found");
    }else{
        //fseek(pf1,0,SEEK_END);
        //int count_file_b = ftell(pf1);
        char buff[1024] = {0};
        int result;
        while((result = fread(buff,sizeof(buff),1,pfa))!=0){
            //printf("%d\n",result);
            fwrite(buff,sizeof(buff),result,pfb);

            /*fgets(buff,sizeof(buff),pfa);
            fputs(buff,pfb);*/
        }
    }

    fclose(pfa);
    fclose(pfb);

 }



根据调试结果来看,fread()读取应该是成功的,但是为什么进不去while循环,无法写入呢?到底错在哪儿
搜索更多相关主题的帖子: color 
2015-08-13 18:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
检查result的值

授人以渔,不授人以鱼。
2015-08-13 18:21
lmlm1001
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:4
帖 子:107
专家分:550
注 册:2015-3-1
收藏
得分:0 
文件确实打开成功
但是sizeof buff = 1024
个人认为你所打开的文件不够1024,所以fread 读取的不到1024 * 1
所以返回了0,并赋值给result
所以没有执行while循环
2015-08-13 20:07
实际应用
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:89
专家分:341
注 册:2015-5-30
收藏
得分:0 
fread(buff,1,sizeof(buff),pfa))
fwrite(buff,1,result,pfb)

2015-08-13 22:34
轉身已陌路
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2014-12-25
收藏
得分:0 
回复 4楼 实际应用
你的意思是不要循环,没太明白你的意思啊,请指点啊
2015-08-14 09:01
轉身已陌路
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2014-12-25
收藏
得分:0 
回复 3楼 lmlm1001
文件大小肯定大于1024啊,是30多M的MP4文件
2015-08-14 09:02
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
以下是引用轉身已陌路在2015-8-14 09:01:36的发言:

你的意思是不要循环,没太明白你的意思啊,请指点啊
他的意思是,你的fread参数不对,除非文件尺寸正好是1024的倍数

程序代码:
#include <stdio.h>

int main( void )
{
    const char* path_1 = "d:\\0.png";
    const char* path_2 = "d:\\00.png";

    FILE* pfa = fopen(path_1,"rb");
    FILE* pfb = fopen(path_2,"wb");

    if( !pfa || !pfb )
    {
        puts( "error, file not found." );
        return 1;
    }

    char buf[1024];
    size_t result;
    while( (result=fread(buf,1,sizeof(buf),pfa)) != 0 )
        fwrite( buf, 1, result, pfb );

    fclose(pfa);
    fclose(pfb);
    return 0;
}

2015-08-14 11:23
轉身已陌路
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2014-12-25
收藏
得分:0 
回复 7楼 rjsp
这个不一定要是文件的整数倍吧,文件不都是有结尾标识嘛
2015-08-14 11:31
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
以下是引用轉身已陌路在2015-8-14 11:31:36的发言:

这个不一定要是文件的整数倍吧,文件不都是有结尾标识嘛
这个不一定要是文件的整数倍吧 ------ 要不要看你自己写的代码呀,对于你的代码而言,只有文件大小是1024的整数倍时才会复制完整。
文件不都是有结尾标识嘛 ------ 没有这回事,另外 有没有结尾标识 和此问题不相干。

错误的原因3楼和4楼已经说了,正确的代码我也给你了
2015-08-14 12:08
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

 void fileOperate_rw(){
     long k=0;
     int result;
        char buff[1024] = {0};
        //int result;

   char path_1[] = "D:\\a d1.mp4";
    char path_2[] = "D:\\a d2.mp4";

    
    FILE* pfa=0;
    FILE* pfb=0 ;

    pfa = fopen(path_1,"rb");
    pfb = fopen(path_2,"wb");

    if(!pfa || !pfb ) printf("error,file not found");
        
    else
    {
       k=0;
       while((result= fread(buff,sizeof(buff),1,pfa))!=0)
       {
            fwrite(buff,sizeof(buff),1,pfb);
            k+=sizeof(buff);//跟踪定位指针
       }
       
              memset(buff,0,10);//清空缓冲,由于最后一次读取不能全部覆盖缓冲区,会剩余上次读取的值
               fseek(pfa,k,0);//回退指针
               fread(buff,sizeof(buff),1,pfa);//从新读取
               fwrite(buff,sizeof(buff),1,pfb);
    }

     if(!pfa)fclose(pfa);
     if(!pfb) fclose(pfb);
}
int main()
{

fileOperate_rw();

return 1;
}


在楼主的代码中
if(pfa == NULL && pfb == NULL)  这句能起到应有的作用吗

[ 本帖最后由 jklqwe111 于 2015-8-14 14:08 编辑 ]
2015-08-14 13:59
快速回复:到底错在哪??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018095 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved