W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
為了從文件獲取數(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中輸出無效信息。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: