我最近閱讀了設定檔案流的位置索引,可以使用
類seek()方法BaseStream。
但是現在,使用.Net Framework 4.8或更大的這兩個功能似乎已被洗掉。
哪個.Net 4.8或更大的流實作了這兩個功能?
我搜索了一個與My.MyComputer.SystemFile.Seek()不同的解決方案,并且不限于使用舊的 VB 6FileOpen()方法!
uj5u.com熱心網友回復:
該類System.IO.FileStream繼承System.IO.Stream該類。后者為所有流提供基本功能,而前者為檔案支持的流提供功能。該Seek方法是Stream該類的成員,因此每個流,無論型別如何,都有該方法。直到 .NET 6 都是如此,只要 .NET 存在,它就會繼續如此。
在某些情況下,該Seek方法可能會拋出 a NotSupportedException,在這種情況下CanSeek,該流的屬性將是False. 如果您有一個流并且您不確定它是否可以搜索,請在呼叫之前測驗該屬性Seek以確保不會引發例外。在 a 的情況下FileStream,檔案(您應該已經閱讀過)告訴我們何時期望該屬性為False:
如果流支持查找,則為 true;如果流已關閉,或者 FileStream 是從作業系統句柄(例如管道或輸出到控制臺)構造的,則為 false。
您可以閱讀其他型別流的檔案以查看它們是否支持搜索,例如支持MemoryStream和NetworkStream不支持。基本上,搜索需要隨機訪問所有資料,而不僅僅是順序訪問。
a上沒有BaseStream屬性FileStream。您參考的屬性是StreamReader類的成員。該屬性將回傳Stream對正在讀取的流的參考。那可能是FileStream,NetworkStream或MemoryStream其他。如果你有 aStreamReader并且你想尋找底層流中的特定位置,但你不知道它是否受支持,那么你得到BaseStream,測驗CanSeek屬性,如果是True,呼叫Seek方法。
With myStreamReader.BaseStream
If .CanSeek Then
'Advance the file pointer 64 bytes.
.Seek(64L, SeekOrigin.Current)
End If
End With
無論哪種型別的流支持讀者,這都會起作用,因為CanSeekandSeek是 and 的成員Stream并且StreamReader.BaseStream是 type Stream。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/511597.html
標籤:VB.net文件寻找
