成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何用 C++ 讀寫文件

開發 后端
如果你知道如何在 C++ 中使用輸入輸出(I/O)流,那么(原則上)你便能夠處理任何類型的輸入輸出設備。

 

[[391166]]

在 C++ 中,對文件的讀寫可以通過使用輸入輸出流與流運算符 >> 和 << 來進行。當讀寫文件的時候,這些運算符被應用于代表硬盤驅動器上文件類的實例上。這種基于流的方法有個巨大的優勢:從 C++ 的角度,無論你要讀取或寫入的內容是文件、數據庫、控制臺,亦或是你通過網絡連接的另外一臺電腦,這都無關緊要。因此,知道如何使用流運算符來寫入文件能夠被轉用到其他領域。

輸入輸出流類

C++ 標準庫提供了 ios_base 類。該類作為所有 I/O 流的基類,例如 basic_ofstream 和 basic_ifstream。本例將使用讀/寫字符的專用類型 ifstream 和 ofstream。

  • ofstream:輸出文件流,并且其能通過插入運算符 << 來實現。
  • ifstream:輸入文件流,并且其能通過提取運算符 >> 來實現。

該兩種類型都是在頭文件 <fstream> 中所定義。

從 ios_base 繼承的類在寫入時可被視為數據接收器,在從其讀取時可被視為數據源,與數據本身完全分離。這種面向對象的方法使 關注點分離separation of concerns 和 依賴注入dependency injection 等概念易于實現。

一個簡單的例子

本例程是非常簡單:實例化了一個 ofstream 來寫入,和實例化一個 ifstream 來讀取。

  1. #include <iostream> // cout, cin, cerr etc...
  2. #include <fstream> // ifstream, ofstream
  3. #include <string>
  4.  
  5.  
  6. int main()
  7. {
  8. std::string sFilename = "MyFile.txt";
  9.  
  10. /******************************************
  11. * *
  12. * WRITING *
  13. * *
  14. ******************************************/
  15.  
  16. std::ofstream fileSink(sFilename); // Creates an output file stream
  17.  
  18. if (!fileSink) {
  19. std::cerr << "Canot open " << sFilename << std::endl;
  20. exit(-1);
  21. }
  22.  
  23. /* std::endl will automatically append the correct EOL */
  24. fileSink << "Hello Open Source World!" << std::endl;
  25.  
  26.  
  27. /******************************************
  28. * *
  29. * READING *
  30. * *
  31. ******************************************/
  32. std::ifstream fileSource(sFilename); // Creates an input file stream
  33.  
  34. if (!fileSource) {
  35. std::cerr << "Canot open " << sFilename << std::endl;
  36. exit(-1);
  37. }
  38. else {
  39. // Intermediate buffer
  40. std::string buffer;
  41.  
  42. // By default, the >> operator reads word by workd (till whitespace)
  43. while (fileSource >> buffer)
  44. {
  45. std::cout << buffer << std::endl;
  46. }
  47. }
  48.  
  49. exit(0);
  50. }

該代碼可以在 GitHub 上查看。當你編譯并且執行它時,你應該能獲得以下輸出:

 

Console screenshot

這是個簡化的、適合初學者的例子。如果你想去使用該代碼在你自己的應用中,請注意以下幾點:

  • 文件流在程序結束的時候自動關閉。如果你想繼續執行,那么應該通過調用 close() 方法手動關閉。
  • 這些文件流類繼承自 basic_ios(在多個層次上),并且重載了 ! 運算符。這使你可以進行簡單的檢查是否可以訪問該流。在 cppreference.com 上,你可以找到該檢查何時會(或不會)成功的概述,并且可以進一步實現錯誤處理。
  • 默認情況下,ifstream 停在空白處并跳過它。要逐行讀取直到到達 EOF ,請使用 getline(...) 方法。
  • 為了讀寫二進制文件,請將 std::ios::binary 標志傳遞給構造函數:這樣可以防止 EOL 字符附加到每一行。

從系統角度進行寫入

寫入文件時,數據將寫入系統的內存寫入緩沖區中。當系統收到系統調用 sync 時,此緩沖區的內容將被寫入硬盤。這也是你在不告知系統的情況下,不要卸下 U 盤的原因。通常,守護進程會定期調用 sync。為了安全起見,也可以手動調用 sync()

  1. #include <unistd.h> // needs to be included
  2.  
  3. sync();

總結

在 C++ 中讀寫文件并不那么復雜。更何況,如果你知道如何處理輸入輸出流,(原則上)那么你也知道如何處理任何類型的輸入輸出設備。對于各種輸入輸出設備的庫能讓你更容易地使用流運算符。這就是為什么知道輸入輸出流的流程會對你有所助益的原因。 

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-04-02 06:35:49

Bash讀寫文件Linux

2010-01-22 16:21:50

C++ Builder

2024-05-06 11:19:20

內存池計算機編程

2010-02-01 14:26:50

C++讀寫文本文件

2014-06-04 13:19:29

C++ndk安卓開發

2009-08-24 15:58:00

Visual C#生成

2010-01-26 15:51:06

C++變量

2010-02-02 13:04:03

C++頭文件

2022-01-14 09:10:56

C++文件Linux

2009-08-13 09:34:55

C#讀寫ini文件

2010-01-28 10:33:10

C++開發程序

2009-08-12 14:13:51

C#讀寫Excel文件

2010-01-26 10:53:58

學C++

2010-01-28 13:35:41

調用C++函數

2010-01-27 09:38:27

C++書籍

2020-01-10 17:45:06

Git共享文件開源

2020-12-02 13:19:47

Shell監控文件Linux

2024-08-27 12:45:26

C++代碼

2010-07-14 17:11:57

Perl文件

2010-01-20 09:54:27

C++數據類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕在线剧情 | av资源中文在线天堂 | 福利视频网站 | 成人在线视频免费观看 | 中文字幕成人av | 色欧美片视频在线观看 | 日本午夜视频 | 国产欧美一区二区三区在线看 | 91久久精品国产91久久性色tv | 在线视频亚洲 | 国产精品久久久久久久久久软件 | 日韩在线免费看 | 一区二区三区在线观看视频 | 日韩一区二区免费视频 | 欧美精品一区二区在线观看 | 一区二区三区四区在线 | 国产高清一区 | 欧美性乱 | 影音先锋中文字幕在线观看 | 久久久成 | 日韩精品在线看 | 草草草影院 | 免费一级片 | 欧美性久久 | 欧美一区二区三区小说 | 亚洲国产高清高潮精品美女 | 国产成人精品一区二区三区网站观看 | 一区在线视频 | 天堂素人约啪 | 国产福利91精品 | 国产1区 | 亚洲欧美中文字幕 | 伊人网站| 日韩在线观看网站 | 亚洲欧美在线免费观看 | 日本久久综合 | 天天在线操 | 成人av在线播放 | 毛片免费视频 | 成人性生交大片免费看中文带字幕 | 亚洲国产成人一区二区 |