我用vc 写了一个ftp断点续传的程序,下载其他任何文件都正常,下载有些rar压缩包时也正常,但是有些就不行。出现的错误是:“CRC失败,文件被破坏”。不知道为啥。我在考虑是不是用recv(dataClient,buffer,len,0)接收数据时有问题了。因为我测试是在自己的电脑上进行的即:ftp地址是127.0.0.1。我在怀疑数据缓冲区的长度即buffer的长度是不是也有关系。高手帮忙了,小弟急呀。

解决方案 »

  1.   

    很有可能是,我也试过,不同的缓冲区对不同的文件长度有效。但有一点是:出.txt格式的文件外,其他的必须是512的倍数。我现在怀疑着是不是和硬盘存储数据的住最小单位有关,因为一簇是512B.还请兄弟赐教解决方法
      

  2.   

    还有,下载rar和下载txt步骤是不一样的,你需要强制binary状态,这个做了吗?
      

  3.   

    我对下载做了监视,ftp文件长度和下载的字节树相等。还是会出现crc错误。但是有时侯不会,比如:当文件长度较短时不会出错。当一个压缩包压缩多个图片时,第一个能下载成功。另外,你说需要强制binary状态,我不知到是不是"TYPE I"。谢谢了
      

  4.   

    int pl = 8192;
    CString fp;
    fp = LocalFileName;

    char buffer[8192];
    CString str = "RETR "+RemoteFileName+" \r\n";
    memset(buffer,0,pl);
    DWORD cnt =0 ;
    int recLen ; send(commandClient,str,str.GetLength(),0);
    recLen = recv(commandClient,buffer,100,0);
    memset(buffer,0,pl);
    while(cnt < pl)
    {
    int recLen = recv(dataClient,buffer + cnt,pl-cnt,0);  
    if(recLen > 0)
    {
    cnt += recLen;
    FilePos += recLen;
    WriteToFile(fp,FilePos,buffer,recLen);
    WriteInforToFile(FileSize,FilePos);
    }
    else if(recLen <= 0)
    return -1;//下载有误
    }
    return 0;
    }
    着是下载函数的部分代码