【问题标题】:FtpWebRequest not downloading more then 8820 bytes of dataFtpWebRequest 不下载超过 8820 字节的数据
【发布时间】:2011-10-17 06:38:35
【问题描述】:

我正在尝试在几个站点之间传输文件,我正在使用 FtpWebRequest 从站点 A 下载文件并将其上传到站点 B。

我面临的问题是当我下载文件时,我没有获得超过 8820 字节的数据。

这是我正在使用的代码:

public FtpFile Download(string path)
{
  string fullpath = ConstructFullpath(path);

  FtpWebRequest request = (FtpWebRequest)WebRequest.Create(fullpath);
  request.Method = WebRequestMethods.Ftp.DownloadFile;
  // login
  request.Credentials = new NetworkCredential(Username, Password);  

  FtpWebResponse response = (FtpWebResponse)request.GetResponse();
  Stream responseStream = request.GetResponse().GetResponseStream();

  byte[] data = new byte[20000];
  int length = responseStream.Read(data, 0, data.Length);
  responseStream.Close();

  FtpFile file = new FtpFile(path, data, length);
  return file;
}

public bool Upload(FtpFile file)
{
  if (!DirectoryExists(GetDirectory(file.Path)))
  {
    CreateDirectory(GetDirectory(file.Path));
  }

  string fullpath = ConstructFullpath(file.Path);
  FtpWebRequest request = (FtpWebRequest)WebRequest.Create(fullpath);
  request.Method = WebRequestMethods.Ftp.UploadFile;
  request.Credentials = new NetworkCredential(Username, Password);


  Stream stream = request.GetRequestStream();
  stream.Write(file.Data, 0, file.Length);
  stream.Close();

  FtpWebResponse response = (FtpWebResponse)request.GetResponse();
  return true;
}

第一张图片显示了源目录。 第二张图片显示了目标目录。

我已经尝试在本地保存文件并得到相同的结果。

【问题讨论】:

    标签: c# ftp


    【解决方案1】:

    你只给Read打了一次电话:

    byte[] data = new byte[20000];
    int length = responseStream.Read(data, 0, data.Length);
    responseStream.Close();
    

    不能保证在一次调用中就可以读取所有数据,而且您永远不应该依赖它来执行此操作。您应该循环(例如,将数据复制到 MemoryStream)直到 Read 返回 0。

    如果您使用的是 .NET 4,Stream.CopyTo 让这一切变得简单:

    MemoryStream ms = new MemoryStream();
    responseStream.CopyTo(ms);
    

    请注意,您还应该使用using 语句而不是显式关闭资源,其中包括FtpWebResponse

    【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2011-02-16
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2012-09-13
    • 1970-01-01
    相关资源
    最近更新 更多