StreamReaderのPeek()メソッドを使用して、処理する必要のある行がまだあるかどうかを確認します。私のファイルには1000行を超えていますが、Peek()はline#750に達すると突然-1を返します。チェックしましたが、ライン#750と#751に違いはないようです。line#750と751を削除しても、他の行で分割されます。
以下はあなたの情報のための私のコードです:
try
{
String ftpserver = ftp + filename;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpserver));
reqFTP.UsePassive = false;
reqFTP.UseBinary = true;
reqFTP.Proxy = null;
reqFTP.Credentials = new NetworkCredential(username, password);
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
response = (FtpWebResponse)reqFTP.GetResponse();
stream = response.GetResponseStream();
reader = new StreamReader(stream, ConfigHelper.MyEncoding);
while (reader.Peek() > -1)
{
string x = reader.ReadLine();
if (x != null)
{
//.......
}
}
}
catch (Exception ex)
{
}
finally
{
if (reader != null)
reader.Close();
if (response != null)
response.Close();
}
試しwhile ((x = reader.ReadLine()) != null)
ましたが、「破棄されたオブジェクトにアクセスできません」という例外がスローされました。
最後に、私はそれを使用して理解しました:
while (stream.CanRead && (x = reader.ReadLine()) != null)