当前位置:编程学习 > C#/ASP.NET >>

FTPWebRequest上传文件大小不对

用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格式),错误文件也不影响正常播放。

请高手,求解。。。

--------------------编程问答-------------------- while循环{
  readBytes = stream.Read(buffer, 0, BufferSize);
  rs.Write(buffer, 0, readBytes);
  rs.Flush();
}
看看你循环的结束条件,应该是提前结束循环,导致少了一些数据。 --------------------编程问答-------------------- 变量readBytes的值始终对吗?检查一下。 --------------------编程问答-------------------- 谢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里面也没有发现异常,都是正常结束
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,