C++ 文件輸入

2023-03-20 16:52 更新

為了從文件獲取數(shù)據(jù),必須創(chuàng)建一個從文件到程序的流對象。這點我們可以利用ifstream的構(gòu)造函數(shù)實現(xiàn):

ifstream infile ("file-name");

該構(gòu)造函數(shù)的參數(shù)是一個字符串,即你要打開的文件的名字。其結(jié)果是創(chuàng)建了infile對象,它支持所有 cin上可以執(zhí)行的操作,包括>>和getline。

int x;
apstring line;
infile >> x; // 讀取一個整型數(shù)并保存到x中
getline (infile, line); // 讀取整行并保存到line中

如果我們提前知道文件中有多少數(shù)據(jù),那就可以直接寫一個循環(huán)來讀取整個文件,然后再停止。然而更常見的情況是,我們想讀取整個文件,但是不知道其大小。

ifstream有幾個用以檢查輸入流狀態(tài)的成員函數(shù),它們是good、eof、fail和bad等。我們使用good函數(shù)來確保文件成功打開,而使用eof函數(shù)來探測”文件尾“。

無論什么時候從輸入流讀取數(shù)據(jù),直到檢查時你才能知道嘗試是否成功。如果eof函數(shù)的返回值為true,那說明已經(jīng)到達文件尾,我們就知道最后一次讀取嘗試以失敗告終。下面程序代碼的功能是:讀取一個文件的每一行并將其輸出到屏幕上。

apstring fileName = ...;
ifstream infile (fileName.c_str());

if (infile.good() == false) {
  cout << "Unable to open the file named " << fileName;
  exit (1);
}

while (true) {
  getline (infile, line);
  if (infile.eof()) break;
  cout << line << endl;
}

函數(shù)c_str把apstring轉(zhuǎn)換為原生C字符串。因為ifstream構(gòu)造函數(shù)期望的參數(shù)是C字符串,所以apstring必須轉(zhuǎn)換一下。

我們可以在打開文件之后,立即調(diào)用good函數(shù)。如果系統(tǒng)無法打開文件,該函數(shù)就返回false,原因很可能是文件不存在或者你沒有文件讀取權(quán)限。

while(true)是無窮循環(huán)的習(xí)慣寫法。通常循環(huán)中某處會有個break語句,這樣程序就不會真的永遠運行下去(不過有的程序的確是希望永遠執(zhí)行)。這個例子中,break語句允許只要發(fā)現(xiàn)文件尾就退出循環(huán)。

退出循環(huán)操作放在輸入語句和輸出語句之間很重要,這樣getline在遇到文件尾失敗之后,我們就不會在line中輸出無效信息。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號