StreamReader,C#,peek
我有一个StreamReader,它可以偶尔检查一个简单的文本文件是否有更多的内容需要读取。它使用peek属性。问题是,当我使用peek时,位置发生了变化,尽管我不想这样做StreamReader,C#,peek,c#,streamreader,.net,peek,C#,Streamreader,.net,Peek,我有一个StreamReader,它可以偶尔检查一个简单的文本文件是否有更多的内容需要读取。它使用peek属性。问题是,当我使用peek时,位置发生了变化,尽管我不想这样做 FileStream m_fsReader = new FileStream( m_strDataFileName, FileMode.OpenOrCreate, FileAcces
FileStream m_fsReader = new FileStream(
m_strDataFileName,
FileMode.OpenOrCreate,
FileAccess.Read,
FileShare.ReadWrite );
StreamReader m_SR = new StreamReader(m_fsReader);
Console.WriteLine("IfCanRead SR Position " + m_fsReader.Position +
" and Length " + m_fsReader.Length);
if (m_SR.Peek() == -1) {
Console.WriteLine("IfCanRead false 2 SR Position " +
m_fsReader.Position + " and Length " + m_fsReader.Length);
return false;
}
else {
Console.WriteLine("IfCanRead true 2 SR Position " +
m_fsReader.Position + " and Length " + m_fsReader.Length);
return true;
}
我自己测试了一下。底层FileStream的位置已更改,但关键点是,这并不意味着StreamReader实际消耗了任何字节。因此没有问题。指示StreamReader的位置没有更改,但您正在检查底层流的当前位置,而不是读卡器本身的位置。我不认为它能保证底层流的位置保持不变。事实上,我怀疑它只是简单地读取它并在内部进行缓冲,以使读卡器的光标保持在前面的位置。这意味着它不能保证底层流的位置不变 StreamReader对象的当前位置不会被Peek更改。如果当前没有更多字符可用,则返回值为-1
发布相关代码,因为Peek不消耗任何字节。这就是Peek的重点。我假设您知道File.ReadAllBytes和其他类似方法,但它们不能在您的特定程序中使用……不,我正在检查StreamReader处理程序。您的代码显示您正在打印流的位置,而不是流读取器。我知道您正在调用阅读器上的Peek,但您似乎认为它将流保留在相同的位置,但文档仅说明它将保持阅读器的位置不变。我将进行编辑,以便您可以删除错误的否决票。+1。你精心设计的答案不应该得负分。+1-真遗憾你投了反对票,而实际上你的答案是“砰”的一声money@Roman--对不正确的答案投反对票是完全合理的,我能理解你怎么会认为我的答案不适用。这就是为什么我评论和编辑,给你一个机会撤销你的投票。没有怨恨。我不知道你到底为什么要否决那些试图帮助你的人。