You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.Net(.Net Framework4.8+)支持Seek和Peek的文件流有哪些?

.NET Framework 4.8+ 中支持 Seek() 的流及替代方案

首先纠正一个误解:.NET Framework 4.8及以上版本并没有移除Seek()方法——它是Stream基类的核心方法之一,只要流支持随机访问,就可以正常调用。你提到的BaseStream通常是指BinaryReader/BinaryWriter等包装类暴露的底层流,只要底层流本身支持定位,就能通过它调用Seek()。

支持Seek()的常见流实现

  • FileStream:最常用的文件操作流,完全支持随机访问,直接调用Seek()或设置Position属性都能完成定位。
  • MemoryStream:内存中的数据流,支持任意位置的定位操作,适合处理内存中的临时数据。
  • BufferedStream:如果它包装的底层流(比如FileStream)支持定位,那么它也能正常调用Seek()。
  • 注意:像NetworkStream这类顺序流不支持定位(CanSeek属性返回False),调用Seek()会抛出异常。

替代VB旧方法的解决方案

以下是纯.NET的实现方式,无需依赖VB6兼容的FileOpen()或My.MyComputer.SystemFile.Seek():

直接使用FileStream定位

Using fs As New FileStream("yourfile.dat", FileMode.Open, FileAccess.Read)
    ' 定位到文件起始位置后第200字节处
    fs.Seek(200, SeekOrigin.Begin)
    
    ' 或者直接设置Position属性,效果完全等价
    ' fs.Position = 200
    
    ' 读取数据
    Dim buffer(511) As Byte
    Dim readCount = fs.Read(buffer, 0, buffer.Length)
End Using

通过BinaryReader/Writer的BaseStream定位

如果用包装类处理数据,可通过BaseStream访问底层流的定位功能:

Using writer As New BinaryWriter(File.OpenWrite("output.bin"))
    ' 写入初始数据
    writer.Write("Hello")
    
    ' 定位到文件开头,覆盖原有内容
    writer.BaseStream.Seek(0, SeekOrigin.Begin)
    writer.Write("Hi")
End Using

关键提示

在调用Seek()前,可以先检查流的CanSeek属性,确认当前流支持定位操作,避免抛出异常:

If fs.CanSeek Then
    fs.Seek(100, SeekOrigin.Current)
End If

内容的提问来源于stack exchange,提问作者schlebe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:05:35