public member function
<fstream>

std::ifstream::open

void open (const char* filename,  ios_base::openmode mode = ios_base::in);
void open (const   char* filename,  ios_base::openmode mode = ios_base::in);void open (const string& filename,  ios_base::openmode mode = ios_base::in);
開啟檔案
開啟由引數 filename 標識的檔案,並將其與流物件關聯,以便對檔案的內容執行輸入/輸出操作。引數 mode 指定了開啟模式

如果流已關聯一個檔案(即它已經開啟),則呼叫此函式失敗。

流的檔案關聯由其內部流緩衝區維護
在內部,該函式呼叫 rdbuf()->open(filename,mode)

如果失敗,函式會將 failbit 設定到流中。
成功時,該函式將狀態標誌清零(將它們設定為 goodbit)。
失敗時,會設定 failbit

引數

filename
包含要開啟的檔案的名稱的字串。
有關其格式和有效性的具體說明取決於庫實現和執行環境。
mode
描述檔案請求的 i/o 模式的標誌。
這是一個位掩碼成員型別 openmode 的物件,由以下成員常量的組合構成:
成員常量代表access
in *輸入用於讀取的檔案:內部流緩衝區 支援輸入操作。
下可用的型別輸出用於寫入的檔案:內部流緩衝區 支援輸出操作。
binarybinary操作以二進位制模式執行,而非文字模式。
ate在末尾輸出位置從檔案末尾開始。
appappend (追加)所有輸出操作都在檔案末尾進行,追加到其現有內容。
trunctruncate (截斷)檔案開啟前存在的任何內容都將被丟棄。
這些標誌可以透過按位或運算子(|)組合。
* in 對於 ifstream 物件始終設定為(即使在引數 mode 中顯式未設定)。
請注意,儘管 ifstream 是輸入流,但其內部 filebuf 物件可以設定為也支援輸出操作。

如果模式設定了 app,則開啟操作失敗。如果設定了 trunc 但未設定 out,操作也會失敗。
如果模式同時設定了 truncapp,則開啟操作失敗。如果設定了 trunc 但未設定 out,操作也會失敗。

返回值



如果函式未能開啟檔案,則會為流設定 failbit 狀態標誌(如果該狀態標誌是透過成員 exceptions 註冊的,則可能丟擲 ios_base::failure)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// print the content of a text file.
#include <iostream>     // std::cout
#include <fstream>      // std::ifstream

int main () {
  std::ifstream ifs;

  ifs.open ("test.txt", std::ifstream::in);

  char c = ifs.get();

  while (ifs.good()) {
    std::cout << c;
    c = ifs.get();
  }

  ifs.close();

  return 0;
}

資料競爭

修改 ifstream 物件。
對同一物件的併發訪問會引入資料競爭。

異常安全

基本保證:如果丟擲異常,處於有效狀態。
如果函式失敗(設定 failbit 狀態標誌)並且成員 exceptions 被設定為針對該狀態丟擲,則會丟擲成員型別為 failure 的異常。

另見