不是说“Peek 不会更改 StreamReader 的当前位置”么。MS骗人的!

farrio 2005-09-22 01:08:32
在MSDN里面看到关于StreamReader.Peek 方法的解释,备注里面说
Peek 不会更改 StreamReader 的当前位置。如果当前没有更多的可用字符,则返回值为 -1。

但是假设C:\CMSG.LOG文件一行内容超过1024字节后,运行下面的程序就会发现Peek之后,
Position变成了1024了。但是此后如果再运行Peek就没有问题了,Position不会改变。
难道MSDN说的是错的???

代码:
Dim fs As New IO.FileStream("C:\CMSG.LOG", IO.FileMode.Open, IO.FileAccess.Read)
Dim sr As New IO.StreamReader(fs, System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage))
MsgBox("Position before peek: " & sr.BaseStream.Position)
sr.Peek()
MsgBox("Position after peek: " & sr.BaseStream.Position)
sr.Close()
fs.Close()
...全文
110 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
farrio 2005-09-22
  • 打赏
  • 举报
回复
MSDN上面说Peek方法是不会修改文件读取位置的,但是通过上面的程序确实发现Peek后文件的读取位置变化了。如果这时候用sr.BaseStream.Read方法读bytes()的话,就会发现前1024位是读不出来的。这个问题如果你用StreamReader.ReadLine是发现不了的。
sz_lgp 2005-09-22
  • 打赏
  • 举报
回复
peek只是读完时状态,至于读了多少个字符和行得别用计数器。
jimmmmm 2005-09-22
  • 打赏
  • 举报
回复
9494
peek是要循环遍历的
SeeSunSet 2005-09-22
  • 打赏
  • 举报
回复
Dim SPeek As Stream
SPeek = File.OpenRead("C:\\Temp\\Test.txt")
Dim SrPeek As StreamReader = New StreamReader(SPeek, _
System.Text.Encoding.ASCII)
' set the file pointer to the beginning
SrPeek.BaseStream.Seek(0, SeekOrigin.Begin)
' cycle while there is a next char
While (SrPeek.Peek() > -1)
Console.Write(SrPeek.ReadLine())
End While
' close the reader and the file
SrPeek.Close()

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧