2017-05-28 88 views
1

我试图从FTP位置有大约9000个文件检索文件的列表。FtpWebRequest ListDirectory不会返回所有文件

但下面的代码总是只给出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(); 
} 
+0

展我们记录了独立FTP客户端的日志文件,证明服务器包含列表中的所有文件。 –

+0

这里你去 - https://drive.google.com/open?id=0B4k0mjANs3sAUG43aWFQdExiNlk我验证了只有前97个文件来到FTPWebResponse流。 –

+0

我要求提供日志文件,而不是截图。无论如何,看到我的答案。 –

回答

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

太好了,你真的很好。没有意识到数据暂时缺乏。很高兴知道。非常感谢! –

相关问题