共用方式為


System.IO.FileStream 類別

本文提供此 API 參考文件的補充備註。

使用 FileStream 類別來讀取、寫入、開啟及關閉檔案系統上的檔案,並進行其他與檔案相關的操作,處理包括管道、標準輸入及標準輸出在內的作業系統句柄。 您可以使用 ReadWriteCopyToFlush 方法來執行同步作業,或 ReadAsyncWriteAsyncCopyToAsyncFlushAsync 方法來執行異步作。 使用異步方法來執行資源密集的檔案作業,而不封鎖主要線程。 在 Windows 8.x 市集應用程式或傳統型應用程式中,此效能考慮特別重要,其中耗時的串流作業可能會封鎖 UI 線程,並讓應用程式看起來好像無法運作。 FileStream 對輸入和輸出進行緩衝,以提升效能。

這很重要

此類型會實作 IDisposable 介面。 當您完成使用這個物品後,應直接或間接地處理它。 若要直接處置類型,請在 Disposetry/ 區塊中呼叫其 catch 方法。 若要間接處置它,請使用語言建構,例如 using (C#) 或 Using (在 Visual Basic 中)。 如需詳細資訊,請參閱介面主題中的 <使用實作 IDisposable 的物件>一節。

屬性 IsAsync 會偵測檔案句柄是否以異步方式開啟。 當您使用具有FileStreamisAsyncuseAsync 參數的建構函式來建立 類別的options實例時,您可以指定此值。 當 屬性為 true時,數據流會利用重疊的 I/O 以異步方式執行檔案作業。 不過, IsAsync 屬性不一定是 true 呼叫 ReadAsyncWriteAsyncCopyToAsync 方法。 IsAsync當 屬性是 false 且您呼叫異步讀取和寫入作業時,UI 線程仍不會遭到封鎖,但實際的 I/O 作業會同步執行。

Seek方法支援隨機存取檔案。 Seek 允許將讀取/寫入位置移至檔案中的任何位置。 可以使用位元組偏移參考點參數來完成此操作。 位元組偏移量是相對於搜尋參考點的,它可以是基礎檔案的開頭、目前位置或結尾,由SeekOrigin列舉的三個成員表示。

備註

磁碟檔案一律支援隨機存取。 在建構時, CanSeek 屬性值會設定為 truefalse ,視基礎檔類型而定。 如果基礎檔類型是FILE_TYPE_DISK,如 winbase.h 中所定義, CanSeek 屬性值為 true。 否則, CanSeek 屬性值為 false

如果進程以鎖定的檔案部分終止,或關閉具有未完成鎖定的檔案,則行為是未定義的。

如需目錄作業和其他檔案作業,請參閱 FileDirectoryPath 類別。 類別 File 是公用程序類別,其靜態方法主要是為了根據檔案路徑建立 FileStream 物件。 類別 MemoryStream 會從位元組陣列建立數據流,而且類似於 FileStream 類別。

如需一般檔案和目錄作業的清單,請參閱 一般 I/O 工作

偵測串流位置變更

FileStream當物件在其控制代碼上沒有獨佔保留時,其他線程可以同時存取文件控制代碼,並變更與文件控制代碼相關聯的作業系統文件指標位置。 在此情況下,物件中 FileStream 快取的位置和緩衝區中快取的數據可能會遭到入侵。 FileStream 物件會例行對存取快取緩衝區的方法進行檢查,以確保操作系統的控制代碼位置與物件所使用的 FileStream 快取位置相同。

如果在呼叫 Read 方法時偵測到句柄位置的意外變更,.NET 會捨棄緩衝區的內容,並再次從檔案讀取數據流。 這可能會影響效能,視檔案大小以及可能影響檔案數據流位置的任何其他進程而定。

如果在呼叫 Write 方法時偵測到句柄位置的意外變更,則會捨棄緩衝區的內容,並拋出 IOException 例外狀況。

當存取FileStream屬性以公開SafeFileHandle物件的句柄,或在建構函式中賦予FileStream物件SafeFileHandle屬性時,該物件的句柄將不會被獨佔保留。