2017-05-28 75 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

太好了,你真的很好。沒有意識到數據暫時缺乏。很高興知道。非常感謝! –

相關問題