C++ 文件輸入輸出


文件輸入輸出

文件寫入:

  1. 准備:

    • 包含 fstream 。
    • fstream 定義了 ofstream 類。
    • 指明 std 。
    • ofstream 對象使用 open() 、 close() 。
  2. 注意:

    • 寫入各種數據: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 。
    • 如果文件不存在則文件打開失敗。

檢查文件是否成功打開:

  • 通常,除非在輸入的文件名中包含路徑,否則程序將在可執行文件所屬的文件夾中查找(或者在相關的路徑)。
  • 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 ,因此僅適用於文本文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM