我使用 StreamReader 的 Peek() 方法来检查是否还有更多行需要处理。我的文件中有 1000 多行,但是 Peek() 在到达第 750 行时突然返回 -1。我检查过,但第 750 行和第 751 行似乎没有区别。即使我删除了第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();
}
I tried while ((x = reader.ReadLine()) != null)
,但抛出了“无法访问已处置对象”的异常。
最后我通过使用解决了这个问题:while (stream.CanRead && (x = reader.ReadLine()) != null)
虽然没有explain发生了什么事,我个人会避免使用Peek
。我会用:
string line;
while ((line = reader.ReadLine()) != null)
{
// Use the line
}
这样你就只能reading在一个地方。不知怎的,这比检查你是否can阅读,然后阅读。
您还可以编写一个方法来创建IEnumerable<string>
from a TextReader
(或来自Func<TextReader>
,或文件名)这可以让这一切变得更加愉快。如果您只是读取文件并且正在使用 .NET 4,那么File.ReadLines已经内置了。
编辑:这是你可能得到-1的原因之一,来自文档StreamReader.Peek:
一个整数,表示要读取的下一个字符;如果没有要读取的字符或流不支持查找,则为 -1。
Does您寻求流媒体支持吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)