System.IO.FileStream 類別

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

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

重要

此型別代表 IDisposable 介面。 當您完成使用型別時,您應該直接或間接處置它。 若要直接處置型別,請呼叫其 try/catch 區塊中的 Dispose 方法。 若要間接處置它,請使用語言建構函式,例如 using (在 C# 中) 或 Using (在 Visual Basic 中)。 如需詳細資訊,請參閱 IDisposable 介面文章中的<使用實作 IDisposable 的物件>一節。

屬性 IsAsync 會偵測檔案句柄是否以異步方式開啟。 當您使用具有isAsyncuseAsyncoptions 參數的建構函式來建立 類別的FileStream實例時,您可以指定此值。 當 屬性為 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當存取 屬性以公開句柄FileStream或物件在其建構函式中提供 屬性時SafeFileHandle,物件不會在其句柄上具有SafeFileHandle獨佔保留。