C++檔案開啟模式詳解

2020-07-16 10:04:42
檔案開啟模式是決定如何使用檔案的設定。openmode 型別定義在一個名為 ios 的流相關類中。這種型別的值是 ios 類的靜態常數成員。每個這樣的值表示一個標誌或一個可以在檔案開啟時設定的選項。表 1 列出了檔案模式標誌及其含義。

表 1 檔案模式標誌
檔案模式標誌 含 義
ios::app 追加:輸出將始終發生在檔案的末尾
ios::ate 最後:輸出最初在檔案的末尾進行
ios::binary 二進位制:讀取或寫入檔案的資料是二進位制形式的
ios::in 輸入:檔案將允許輸入操作。如果檔案不存在,開啟將失敗
ios::out 輸出:檔案將允許輸出操作。如果檔案不存在,則建立一個給定名稱的空檔案
ios::trunc 截斷:如果開啟的檔案存在,其內容將被丟棄,其大小被截斷為零

二元或運算子 | 可以用來結合兩個或更多標誌的效果。例如,以下開啟模式將導致開啟的檔案既可以輸入也可以輸出,並且輸出最初在檔案的末尾進行:

ios::in | ios::out 丨 ios::ate

以下是使用 fstream 開啟 3 個檔案執行輸入、輸出和輸入輸出的範例:
fstream inFile, outFile, inOutFile;
inFile.open("in.txt", ios::in);
outFile.open ("out.txt", ios::out);
outFile.open("inout.txt", ios::in | ios::out);
注意,使用 ios::out 標誌會使現有檔案的內容被刪除,因為它假定程式設計師想要覆蓋檔案。如果 ios::out 與 ios::app 結合使用,則現有檔案的內容將被保留,並且所有新資料都會附加到檔案的末尾。

使用建構函式開啟檔案

ifstream、ofstream 和 fstream 這 3 個流類都有初始化建構函式,使用其中的一個初始化建構函式即可在單個語句中建立流物件並開啟一個檔案:

fstream outFile("inout.txt", ios::in | ios::out);