用FtpWebRequest向公网FtpServer上上传文件,上传完成后,文件大小比本地文件小本地操作系统XP,服务器2003,FtpServer FileZilla上传部分代码:
ftp.UseBinary = true;int BufferSize = 1024;
byte[] buffer = new byte[BufferSize];
int readBytes;while循环{
  readBytes = stream.Read(buffer, 0, BufferSize);
  rs.Write(buffer, 0, readBytes);
  rs.Flush();
}上传文件大部分正常,有一小部分文件比原始文件小1K到10几K不等。测试用文件大小649KB(665,107字节)占用空间652KB(667,648字节)
上传后错误文件
1.大小649KB(664,576字节)占用空间652KB(667,648字节)
2.大小648KB(663,552字节)占用空间648KB(663,552字节)
3.大小647KB(662,528字节)占用空间648KB(663,552字节)
还有646KB,645KB和644KB的情况
上传1个多G的大文件有时候也会少几K,比较后发现都是文件尾有部分差异,少东西。上传的都是视频文件(wmv格式),错误文件也不影响正常播放。请高手,求解

解决方案 »

  1.   

    while循环{
      readBytes = stream.Read(buffer, 0, BufferSize);
      rs.Write(buffer, 0, readBytes);
      rs.Flush();
    }
    看看你循环的结束条件,应该是提前结束循环,导致少了一些数据。
      

  2.   

    变量readBytes的值始终对吗?检查一下。
      

  3.   

    谢2位上传部分完整代码
    Stream rs = ftp.GetRequestStream();
    stream.Seek(offset, SeekOrigin.Begin);
    do
    {
      if (isAbort)
      {
        try
        {
          rs.Close();
          stream.Close();
          ftp = null;
        }
        catch
        {
        }
          return false;
      }
      readBytes = stream.Read(buffer, 0, BufferSize);
      rs.Write(buffer, 0, readBytes);
      rs.Flush();
      }
    while (readBytes != 0);大部分时候能完整上传,对比了一下所有有问题的文件,基本都是少了最后一个或几个包。
    FtpServer的Log里面也没有发现异常,都是正常结束