小编Way*_*ide的帖子

如何获取Stream的底层文件句柄?

我有一个适用于物理内存快照的应用程序(例如,VMware VMEM文件).除此之外,它还可以通过虚拟而非物理地址从快照中读取进程/模块.这涉及通过页表一次重建4KB模块,这反过来意味着对Stream的Seek()方法的大量调用.

由于我不确定的原因,这些对Seek()的调用使事情陷入困境.因此,我正在寻找一种解决方法 - 或者至少是围绕托管Seek()实现的方法.我最好的猜测是PInvoke SetFilePointer并直接使用它,但为了做到这一点,我需要为Stream获取IntPtr/SafeFileHandle.我有一些限制:

  1. 我正在使用的API仅限于.NET 3.5,所以不幸的是MemoryMappedFile不是一个选项.

  2. 我不能使用FileStream(已经有一个可以通过反射访问的私有SafeFileHandle字段)或PInvoke CreateFile()以另一种方式获取快照 - 该API包含一个对快照具有独占锁定的BinaryReader.

当然,与FileStream不同,BinaryReader及其底层Stream都没有对文件句柄的引用.但肯定必须存在一个?在这种情况下,我该如何获取它?

.net c# stream seek

6
推荐指数
1
解决办法
3649
查看次数

标签 统计

.net ×1

c# ×1

seek ×1

stream ×1