【问题标题】:FtpWebRequest ListDirectory does not return all filesFtpWebRequest ListDirectory 不返回所有文件
【发布时间】:2017-10-28 16:16:55
【问题描述】:

我正在尝试从包含大约 9000 个文件的 FTP 位置检索文件列表。

但下面的代码总是只给出 97 个文件。在第 98 个文件的循环开始时,StreamReader.Peek() 变为 -1

输出“test.txt”总是只有前 97 个文件,如 FTP 响应本身只包含 97 个文件。

感谢任何帮助。

requestList = (FtpWebRequest)WebRequest.Create("xxx");
requestList.Credentials = new NetworkCredential("xx", "xx");
requestList.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

responseList = (FtpWebResponse)requestList.GetResponse();
responseListStream = responseList.GetResponseStream();
listReader = new StreamReader(responseListStream);

using (StreamWriter w = new StreamWriter("test.txt"))
{
    while (listReader.Peek() >= 0)
    {
        w.WriteLine(listReader.ReadLine());
    }
    w.Close();
}

【问题讨论】:

  • 向我们展示独立 FTP 客户端的日志文件,证明服务器包含列表中的所有文件。
  • 给你 - drive.google.com/open?id=0B4k0mjANs3sAUG43aWFQdExiNlk 我确认只有前 97 个文件进入 FTPWebResponse 流。
  • 我要求的是日志文件,而不是屏幕截图。不管怎样,看我的回答。

标签: c# .net ftp stream ftpwebrequest


【解决方案1】:

Peek() 条件错误。只要暂时没有可供读取的数据,它就会中断您的循环。

使用此代码:

string line;
while (!string.IsNullOrEmpty(line = listReader.ReadLine()))
{
    w.WriteLine(line);
}

如果您只需要复制流,请使用:

w.Write(listReader.ReadToEnd());

甚至更好(更高效):

using (Stream fileStream = File.Create("test.txt"))
{
    responseListStream.CopyTo(fileStream);
}

【讨论】:

  • 太好了,你说的对。没有意识到暂时缺乏数据。很高兴知道。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2013-07-02
  • 2016-03-07
  • 1970-01-01
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
相关资源
最近更新 更多