2017-05-28 4 views
1

約9000個のファイルを持つFTPの場所からファイルのリストを取得しようとしています。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

偉大な、あなたにスポットだった。瞬間的なデータの不足を認識していなかった。知っておいてよかった。どうもありがとう! –

関連する問題