檔案和流 I/O(輸入/輸出)是指數據在儲存媒介之間的傳輸。 在 .NET 中 System.IO ,命名空間包含可同步和異步地在數據流和檔案上讀取和寫入的類型。 這些命名空間也包含對檔案執行壓縮和解壓縮的類型,以及透過管道和序列埠啟用通訊的類型。
檔案是具有持久存儲的已排序並具名的位元組集合。 當您使用檔案時,您可以使用目錄路徑、磁碟記憶體和檔案和目錄名稱。 相反地,數據流是一連串位元組,可用來讀取和寫入備份存儲區,它可以是數種儲存媒體之一(例如磁碟或記憶體)。 如同磁碟以外的數個備份存放區,除了檔案數據流以外,還有數種數據流,例如網路、記憶體和管道數據流。
檔案和目錄
您可以使用 命名空間中的 System.IO 類型來與檔案和目錄互動。 例如,您可以取得和設定檔案和目錄的屬性,並根據搜尋準則擷取檔案和目錄的集合。
如需路徑命名慣例和表達 Windows 系統檔案路徑的方式,包括 .NET Core 1.1 和更新版本中支援的 DOS 裝置語法和 .NET Framework 4.6.2 和更新版本,請參閱 Windows 系統上的檔案路徑格式。
以下是一些常用的檔案和目錄類別:
File - 提供靜態方法來建立、複製、刪除、移動和開啟檔案,並協助建立 FileStream 物件。
FileInfo - 提供實例方法來建立、複製、刪除、移動和開啟檔案,並協助建立 FileStream 物件。
Directory - 提供靜態方法來建立、移動及列舉目錄和子目錄。
DirectoryInfo - 提供實例方法來建立、移動及列舉目錄和子目錄。
Path - 提供方法和屬性,以跨平臺方式處理目錄字串。
呼叫文件系統方法時,您應該一律提供健全的例外狀況處理。 如需詳細資訊,請參閱 處理 I/O 錯誤。
除了使用這些類別之外,Visual Basic 使用者還可以使用 類別針對檔案 I/O 所提供的 Microsoft.VisualBasic.FileIO.FileSystem 方法和屬性。
請參閱 如何:複製目錄、如何 :建立目錄清單,以及如何 :列舉目錄和檔案。
溪流
抽象基類 Stream 支援讀取和寫入位元組。 代表數據流的所有類別都會繼承自 Stream 類別。 類別 Stream 及其衍生類別提供數據源和存放庫的通用檢視,並將程式設計人員與作系統和基礎裝置的特定詳細數據隔離。
串流涉及三個基本操作:
讀取 - 將數據從數據流傳輸到數據結構,例如位元組陣列。
寫入 - 將數據從數據來源傳輸到數據流。
搜尋 - 查詢和修改數據流中目前的位置。
視基礎數據源或存放庫而定,數據流可能只支援其中一些功能。 例如,類別 PipeStream 不支持搜尋。 數據流 CanRead的、 CanWrite和 CanSeek 屬性會指定資料流支援的作業。
以下是一些常用的數據流類別:
FileStream – 用於讀取和寫入檔案。
IsolatedStorageFileStream – 讀取和寫入隔離記憶體中的檔案。
MemoryStream – 用於讀取和寫入記憶體作為備份儲存區。
BufferedStream – 改善讀取和寫入作業的效能。
NetworkStream – 用於通過網路套接字進行讀取與寫入。
PipeStream – 用於讀取和寫入匿名和命名管道。
CryptoStream – 用於將資料流連結至密碼編譯轉換。
如需異步處理數據流的範例,請參閱 異步檔案 I/O。
讀者和作者
命名空間 System.IO 也提供從數據流讀取編碼字元,並將其寫入數據流的類型。 一般而言,數據流是針對位元組輸入和輸出所設計。 讀取器和寫入器類型會處理編碼字元與位元組之間的轉換,讓數據流可以完成作業。 每個讀取器和寫入器類別都與數據流相關聯,該數據流可透過 類別的 BaseStream 屬性擷取。
以下是一些常用的讀取器和寫入器類別:
BinaryReader 和 BinaryWriter – 用於讀取和寫入基本數據類型做為二進位值。
StreamReader 和 StreamWriter – 用於讀取和寫入字元,方法是使用編碼值將字元轉換為位元組並從位元組還原字元。
StringReader 和 StringWriter – 用於讀取和寫入字串中的字元。
TextReader 和 TextWriter – 做為讀取和寫入字元和字串之其他讀取器和寫入器,但不是二進位數據的抽象基類。
請參閱 如何:從檔案讀取文字、如何 :將文字寫入檔案、如何 :從字串讀取字元, 以及如何:將字元寫入字串。
異步輸入/輸出操作
讀取或寫入大量數據可能需要大量資源。 如果您的應用程式需要繼續回應使用者,您應該以異步方式執行這些工作。 使用同步 I/O 作業時,UI 線程會遭到封鎖,直到資源密集型作業完成為止。 開發 Windows 8.x 市集應用程式時,請使用異步 I/O 作業,以避免產生 App 已停止運作的印象。
異步成員在名稱中包含 Async,例如 CopyToAsync、FlushAsync、ReadAsync 和 WriteAsync 方法。 您可以使用這些方法搭配 async 和 await 關鍵詞。
如需詳細資訊,請參閱 異步檔案 I/O。
壓縮
壓縮是指減少檔案大小以供記憶體使用的程式。 解壓縮是將壓縮文件的內容提取出來,轉換成可用的格式。 命名空間 System.IO.Compression 包含壓縮和解壓縮檔案和數據流的類型。
壓縮和解壓縮檔案和數據流時,經常會使用下列類別:
ZipArchive – 用於建立和擷取 zip 壓縮檔中的項目。
ZipArchiveEntry – 表示壓縮檔案。
ZipFile – 用於建立、擷取和開啟壓縮套件。
ZipFileExtensions – 用於建立和擷取壓縮封裝中的條目。
DeflateStream – 用於使用Deflate演演算法壓縮和解壓縮資料流。
GZipStream – 用於壓縮和解壓縮 gzip 數據格式的數據流。
請參閱 如何:壓縮和擷取檔案。
隔離儲存區 (Isolated Storage)
隔離儲存區是一種數據儲存機制,可藉由定義標準化的程式代碼與已儲存數據建立關聯的方式,來提供隔離和安全性。 記憶體提供由使用者、元件和 (選擇性) 網域隔離的虛擬文件系統。 當您的應用程式沒有存取使用者檔案的許可權時,隔離儲存區特別有用。 您可以使用電腦安全策略所控制的方式儲存應用程式的設定或檔案。
Windows 8.x 市集應用程式無法使用隔離儲存區;請改用命名空間中的 Windows.Storage 應用程式資料類別。 如需詳細資訊,請參閱 應用程式數據。
實作隔離記憶體時,經常會使用下列類別:
IsolatedStorage – 提供隔離儲存實作的基類。
IsolatedStorageFile – 提供包含檔案和目錄的隔離儲存區域。
IsolatedStorageFileStream - 公開隔離記憶體內的檔案。
請參閱 隔離儲存區。
Windows 市集應用程式中的 I/O 作業
適用於 Windows 8.x 市集應用程式的 .NET 包含讀取和寫入數據流的許多類型;不過,此集合不包含所有 .NET I/O 類型。
在 Windows 8.x 市集應用程式中使用 I/O 作業時要注意的一些重要差異:
Windows 8.x 市集應用程式的 .NET 不包含與檔案作業相關的類型,例如 File、 FileInfoDirectory 和 DirectoryInfo。 請改用 Windows 執行時間命名空間中的 Windows.Storage 型別,例如 StorageFile 和 StorageFolder。
隔離儲存區無法使用;請改用 應用程式數據。
使用 異步方法,例如 ReadAsync 和 WriteAsync,以防止封鎖UI線程。
路徑型壓縮類型 ZipFile , ZipFileExtensions 無法使用。 請改用 命名空間中的 Windows.Storage.Compression 型別。
如有必要,您可以在 .NET Framework 數據流和 Windows 運行時間數據流之間轉換。 如需詳細資訊,請參閱 如何:在 .NET Framework 數據流與 Windows 執行時間資料流之間轉換 或 WindowsRuntimeStreamExtensions。
如需 Windows 8.x 市集應用程式中 I/O 作業的詳細資訊,請參閱 快速入門:讀取和寫入檔案。
I/O 和安全性
當您使用 命名空間中的 System.IO 類別時,必須遵循作系統安全性需求,例如訪問控制清單 (ACL) 來控制檔案和目錄的存取權。 此要求是在任何 FileIOPermission 要求之外的附加要求。 您可以透過程式設計方式管理 ACL。 如需詳細資訊,請參閱 如何:新增或移除存取控制清單項目。
預設安全策略會防止因特網或內部網路應用程式存取用戶電腦上的檔案。 因此,在撰寫要透過因特網或內部網路下載的程式代碼時,請勿使用需要實體檔案路徑的 I/O 類別。 請改用 .NET 應用程式的 隔離記憶體 。
只有在建構數據流時,才會執行安全性檢查。 因此,請勿開啟數據流,然後將它傳遞至不太受信任的程式代碼或應用程式域。
相關主題
一般 I/O 工作
提供與檔案、目錄和數據流相關聯的 I/O 工作清單,以及每個工作相關內容和範例的連結。非同步檔案 I/O
描述異步 I/O 的效能優點和基本作業。隔離儲存區
描述數據儲存機制,藉由定義標準化的程式代碼與已儲存數據建立關聯的方式,以提供隔離和安全性。管道
描述 .NET 中的匿名和命名管道作業。Memory-Mapped 檔案
描述記憶體對應檔案,其中包含虛擬記憶體中磁碟上檔案的內容。 您可以使用記憶體對應檔案來編輯非常大的檔案,以及建立用於進程間通訊的共用記憶體。