FtpWebRequest ListDirectory不会返回所有文件

时间:2017-05-28 05:27:10

标签: c# .net ftp stream ftpwebrequest

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

但以下代码始终只提供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();
}

1 个答案:

答案 0 :(得分:3)

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);
}