1. 程式人生 > >C++利用一個fstream流讀寫檔案

C++利用一個fstream流讀寫檔案

原文地址:https://blog.csdn.net/qq_34176290/article/details/80260377

fstream物件可以同時具有ifstreamofstream的功能,嘗試使用一個流對檔案進行讀寫的程式碼如下:


    
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. int main()
  5. {
  6. char data[ 200];
  7. fstream afile;
  8. afile.open( "afile.dat", ios::app|ios::out|ios::in);
  9. cin>>data;
  10. //將資料寫入檔案
  11. afile<<data;
  12. //將資料從檔案中讀取出來
  13. afile>>data;
  14. cout<<data;
  15. afile.close();
  16. return 0;
  17. }

向檔案中輸入111111,並從檔案中成功讀取出來


第二次執行向檔案中輸入2222222,由於使用了ios::app追加的檔案開啟模式,所以應該在111111後面加入了222222,期望輸出1111122222,可實際只輸出了222222



這是因為使用了ios::app模式導致檔案定位到末尾,所以讀出的資料是從222222開始的。

 如果要從頭輸出檔案,則應該使用afile.seekg(ios::beg);,讓檔案重新定位到開頭,程式碼如下


    
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. int main()
  5. {
  6. char data[ 200];
  7. fstream afile;
  8. afile.open( "afile.dat", ios::app|ios::out|ios::in);
  9. cin>>data;
  10. cin.ignore();
  11. afile<<data;
  12. afile.seekg(ios::beg);
  13. afile>>data;
  14. cout<<data;
  15. afile.close();
  16. return 0;
  17. }

執行後成功輸出檔案中所有資料


總結:使用一個fstream雖然可以同時進行讀寫,但也會因為檔案指標的位置造成程式設計上的困難,當 C++ 程式終止時,它會自動關閉重新整理所有流,釋放所有分配的記憶體,並關閉所有開啟的檔案。但程式設計師應該養成一個好習慣,在程式終止前關閉所有開啟的檔案。程式的異常退出可能會導致還未寫入檔案還留在緩衝中的資料丟失,因此使用ifstream和ofstream進行讀寫後立即關掉檔案比一直使用一個fstream進行讀寫也更安全。


有錯誤歡迎指出


fstream物件可以同時具有ifstreamofstream的功能,嘗試使用一個流對檔案進行讀寫的程式碼如下:


  
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. int main()
  5. {
  6. char data[ 200];
  7. fstream afile;
  8. afile.open( "afile.dat", ios::app|ios::out|ios::in);
  9. cin>>data;
  10. //將資料寫入檔案
  11. afile<<data;
  12. //將資料從檔案中讀取出來
  13. afile>>data;
  14. cout<<data;
  15. afile.close();
  16. return 0;
  17. }

向檔案中輸入111111,並從檔案中成功讀取出來


第二次執行向檔案中輸入2222222,由於使用了ios::app追加的檔案開啟模式,所以應該在111111後面加入了222222,期望輸出1111122222,可實際只輸出了222222



這是因為使用了ios::app模式導致檔案定位到末尾,所以讀出的資料是從222222開始的。

 如果要從頭輸出檔案,則應該使用afile.seekg(ios::beg);,讓檔案重新定位到開頭,程式碼如下


  
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. int main()
  5. {
  6. char data[ 200];
  7. fstream afile;
  8. afile.open( "afile.dat", ios::app|ios::out|ios::in);
  9. cin>>data;
  10. cin.ignore();
  11. afile<<data;
  12. afile.seekg(ios::beg);
  13. afile>>data;
  14. cout<<data;
  15. afile.close();
  16. return 0;
  17. }

執行後成功輸出檔案中所有資料


總結:使用一個fstream雖然可以同時進行讀寫,但也會因為檔案指標的位置造成程式設計上的困難,當 C++ 程式終止時,它會自動關閉重新整理所有流,釋放所有分配的記憶體,並關閉所有開啟的檔案。但程式設計師應該養成一個好習慣,在程式終止前關閉所有開啟的檔案。程式的異常退出可能會導致還未寫入檔案還留在緩衝中的資料丟失,因此使用ifstream和ofstream進行讀寫後立即關掉檔案比一直使用一個fstream進行讀寫也更安全。


有錯誤歡迎指出