檔案輸入輸出
檔案寫入:
-
準備:
- 包含 fstream ,
- fstream 定義了 ofstream 類,
- 指明 std ,
- ofstream 物件使用 open() 、 close() ,
-
注意:
- 寫入各種資料:ofsteam物件 <<
#include<fstream> using namespace::std; ofsteam fout; fout.open(c_str); fout << data; fout.close();
注:向檔案輸入字串時會同時輸入結尾的空字符,
-
- 所有可用于 cout 的操作和方法都可用于 ofstream 物件,
- 如果檔案不存在則新建,否則重建,
檔案讀入:
-
準備:
- 包含 fstream ,
- fsteam 定義了 ifstream 類,
- 指明 std ,
- ifstream 物件使用 open() 、 close() ,
-
注意:
- 讀取各種資料:ifsteam 物件 >>
#include<fstream> using namespace::std; ifsteam fin; fin.open(c_str); fin >> ch; fin.close();
- 所有可用于 cin 的操作和方法都可用于 ifstream 物件,
- ifsteam 物件本身被用作測驗條件時,如果最后一個讀取操作成功,它將被轉換為布林值 true ,否則被轉換為 false ,
- 如果檔案不存在則檔案打開失敗,
- 讀取各種資料:ifsteam 物件 >>
檢查檔案是否成功打開:
- 通常,除非在輸入的檔案名中包含路徑,否則程式將在可執行檔案所屬的檔案夾中查找(或者在相關的路徑),
- ifstream物件.is_open() 、 ofsteam物件.is_open() ,回傳 true 、 false ,
inFile.open(str); if (!inFile.is_open()) { exit(EXIT_FAILURE); }注:exit() 的原型在cstdlib 中定義,該頭檔案還定義了 EXIT_FAILURE ,
檢查資料讀入是否成功:
- 程式讀取檔案時不應超過 EOF ,
- 幾個方法:
- eof () :如果最后一次讀取資料時遇到 EOF ,方法 eof () 將回傳 true ,
- fail () :如果最后一次讀取操作中發生了型別不匹配的情況,方法 fail () 將回傳 true (如果遇到了 EOF ,該方法也將回傳 true ),
- bad () :可能出現意外的問題,如檔案受損或硬體故障,如果最后一次讀取檔案時發生了這樣的問題,方法 bad () 將回傳 true,
- good () :該方法在沒有發生任何錯誤時回傳 true ,
- 程式中使用 good () 方法,然后,如果愿意,可以使用其它方法來確定回圈終止的真正原因,
while (inFile.good()) //while input good and not at EOF { ... }if (inFile.eof()) cout << "End of file reached.\n"; else if (inFile.fail () ) cout << "Input terminated by data mismatch.\n"; else cout << "Input terminated for unknown reason.\n"; - 方法 good () 指出最后一次讀取輸入的操作是否成功,這意味著應該在執行讀取輸入的操作后,立刻應用這種測驗,一種標準方法是,在回圈之前(首次執行回圈測驗前)放置一條輸入陳述句,并在回圈的末尾(下次執行回圈測驗之前)放置另一條輸入陳述句:
// standard file-reading loop design inFile >> value; // get first value while (inFile.good()) { // loop body goes here inFile >> value; // get next value }鑒于運算式 inFle >> value 的結果為 inFile ,而在需要一個 bool 值的情況下, inFile 的結果為 inFile.good() ,即 true 或 false ,代碼可精簡如下:
// abbreviated file-reading loop design // omit pre-loop input while (inFile << value) // read and test for success { // loop body goes here // omit end-of-loop input }
注意:
- Windows 文本檔案的每行都以回車字符和換行符結尾;通常情況下,C++ 在讀取檔案時將這兩個字符轉換為換行符,并在寫入檔案時執行相反的轉換,
- 控制臺輸入的檔案版本是文本檔案,即每個位元組都存盤了一個字符編碼的檔案,并非所有的檔案都是文本檔案,例如,資料庫和電子表格以數值格式(即二進制整數或浮點格式)來存盤數值資料,另外,字處理檔案中可能包含文本資訊,但也可能包含用于描述格式、字體、列印機等的非文本資料,
- 以上討論的檔案 I/O 相當于控制臺 I/O ,因此僅適用于文本檔案,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/49356.html
標籤:C++
上一篇:[C++]HelloWorld背后的故事!總結一下在我們運行exe可執行檔案前究竟發生了什么!
下一篇:linux環境下的時間編程
