Нет дескриптора файла для Stream
, потому что это абстрактный класс.Класс, реализующий Stream
, может использовать или не использовать дескриптор файла - FileStream
использует, так как он читает данные из файла, но, например, MemoryStream
не делает.
Чтобы получить базовыйдескриптор файла (в данном случае SafeFileHandle
) из BinaryReader
, для которого Stream
является FileStream
, используйте отражение для доступа к private SafeFileHandle _handle
, например так:
SafeFileHandle sfh = (SafeFileHandle)typeof(FileStream).GetField("_handle", BindingFlags.NonPublic | BindingFlags.Instance).GetValue((FileStream)YOUR_BINARY_READER.BaseStream)
На примечании стороны: ни прямые звонки на SetFilePointer()
, ни MemoryMappedFile
в этом случае не помогли.Кажется, нет быстрого способа обработки произвольного доступа к диску на том томе, который я использую (миллионы последовательных вызовов).