在我复制文件的函数中
{
        FILE *readfile,*writefile;
DWORD readlen,filelen,poslen=0;

CString strsrc,strdes;
char buf[512];
GetDlgItemText(IDC_EDIT1,strsrc);
GetDlgItemText(IDC_EDIT2,strdes); readfile=fopen(strsrc,"r");
writefile=fopen(strdes,"wb"); fseek(readfile,0,SEEK_END);
filelen=ftell(readfile); rewind(readfile);
while(1)
{
ZeroMemory(buf,10);
readlen=fread(buf,sizeof(char),512,readfile);
poslen+=readlen;
fwrite(buf,sizeof(char),readlen,writefile);
if(poslen==filelen)
{
AfxMessageBox("Copy successful");
return; 
}
fflush(writefile);
fclose(writefile);
fclose(readfile);
}
}
文件没有复制成功,而且CPU的使用占到了100%,请高手看看,是哪里的问题?

解决方案 »

  1.   

    哦,知道哪里错了,
    fflush(writefile); 
    fclose(writefile); 
    fclose(readfile); 
    这段代码要放在while()后面
      

  2.   

    死循环了,建议:
    if(poslen==filelen) --->  if(readlen < 512)
    这样在读到文件尾时就能结束循环 
      

  3.   

    我将代码改成了
    {
    FILE *readfile,*writefile;
    DWORD readlen,poslen=0;

    CString strsrc,strdes;
    char buf[512];
    GetDlgItemText(IDC_EDIT1,strsrc);
    GetDlgItemText(IDC_EDIT2,strdes); readfile=fopen(strsrc,"r");
    writefile=fopen(strdes,"wb"); while(1)
    {
    ZeroMemory(buf,512);
    readlen=fread(buf,sizeof(char),512,readfile); fwrite(buf,sizeof(char),readlen,writefile);
    if(readlen<512)
    {
    AfxMessageBox("Copy successful");
    break; 
    }
    }
    fflush(writefile);
    fclose(writefile);
    fclose(readfile);
    }
    但是复制压缩文件以后,解压生成的文件,提示文件被破坏,无法解压,但是复制文本文件却没有问题。
      

  4.   

    readlen <512这个条件是什么意思?以char为单位,读512个就写一次,但是文件的长度不一定正好是512的整数倍啊;最后假如剩下510个就不写到新文件中了么?文本文件当然不存在这个问题,你只是打开了复制后的文件,并没有确认里面的内容到底全不全;
      

  5.   

    readfile=fopen(strsrc,"r"); ---> readfile=fopen(strsrc,"rb");
      

  6.   

    谢谢飞翔的鱼,对,它默认的是文本格式,不是二进制格式的,Thank you,问题解决了!
    给你加分!