【C++】檔案的讀取與寫入

來源:互聯網
上載者:User

標籤:c++   檔案   檔案流   字串   二維數組   

C++的檔案讀取與寫入感覺比起其它語言特別地難,對比起《【Python】檔案讀寫操作》(點擊開啟連結)、《【php】讓記事本成為你調控變數的控制台》(點擊開啟連結)與《【Java】輸入與輸出與JDK1.5之後的新型字串StringBuilder》(點擊開啟連結),C++最大的特點就是檔案的輸入資料流與輸出資料流分開,同時最關鍵的是自身並沒有字串變數,在其檔案的讀取方法變數限制於字元數組char[],需要利用到一個二維的字元數組char[][]才能完事。

同時由於各大的編譯器不同,C++在你不對變數初始化也不會出現警告的情況下,你還必須用memset方法,自己對二維字元數組初始化,使得判斷為空白的條件一致。

下面,用以下的一個程式說明問題:


如果f:\1.txt不存在,則先自己建立這個檔案,之後,使用者不停地輸入資料,直到輸入exit;結束。

程式的難度主要是在檔案的內容讀入到C++的二維數組上,其基本思想如所示:


代碼如下:

#include<iostream>#include<fstream>using namespace std;int main(){char input[255];//用來接受使用者輸入的內容char fileContent[100][255];//用來接檔案內容的數組,相等於一個一維的字串數組。memset(fileContent,'\0',sizeof(fileContent));//這裡必須對整個數組進行初始化,不然的話,不同的編譯器對數組初始化的值不同,導致下面的輸出無法判斷char* filePath="F:\\1.txt";//這樣可以避免引入string標頭檔,使用string類型了while(1){//讀取檔案到C++ifstream infile(filePath,ios::in|ios::_Nocreate);//vs寫成ios::_Nocreate,vc6是ios::nocreateif(!infile){//如果輸入資料流初始化失敗就是檔案不存在cout<<filePath<<"不存在,已為你建立!"<<endl;ofstream fileCreate(filePath,ios::_Noreplace);//用來建立檔案專用的輸出資料流,vs寫成ios::_Noreplace,vc6是ios::noreplaceif(fileCreate){fileCreate.close();//人走帶門}else{cerr<<"出錯了!"<<endl;exit(1);}}else{for(int i=0;!infile.eof();i++){//這個迴圈的結束條件是輸入資料流遇到檔案的結尾,也就是讀完F:\1.txt中的資料infile.getline(fileContent[i],255);//利用getline的方法一行一行的讀取,每一行作為一個字串,放到fileContent的第二維}cout<<filePath<<"現時的內容如下:"<<endl;}infile.close();//讀取完畢之後人走帶門for(int i=0;fileContent[i][0]!='\0';i++){//列印的結束條件是遇到fileContent數組中沒有第0個欄位沒有被填充的空行cout<<fileContent[i]<<endl;}cout<<"輸入一些東西到"<<filePath<<",輸入exit;退出!"<<endl;cin>>input;if(!strcmp(input,"exit;")){//如果使用者輸入的字串與exit;相等,strcmp(input,"exit;")則返回0,進入這個條件結構,終止這個程式return 0;//這就是主函數以int類型作為傳回值,return 0的好處,用來設定程式終點,當然如果用void作為主函數的傳回值exit(0);也可以做到這一點}//C++輸出內容到檔案ofstream outfile(filePath,ios::ate|ios::_Nocreate);//ios::ate可以直接把指標放到檔案末尾。ios::app不好用,要配合outfile.seekp(0,ios::end)才能把檔案弄到檔案末尾,預設是在檔案頭if(!outfile){cerr<<"出錯了!"<<endl;exit(1);}else{outfile<<input<<'\n';//將使用者輸入的內容對檔案輸出資料流進行輸出}outfile.close();//人走帶門}}

注釋已經說得比較清楚了。這裡不再贅述。

唯一想說一下,

涉及檔案操作,開頭必須引入<fstream>

利用getline方法,C++能把一行內指定長度的內容,這裡是255,讀取到你指定的一維數組中,遇到Enter等分行符號則自動終止,無論此時所讀的一行長度是否累積到255,同時自己把游標移到下一行。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

【C++】檔案的讀取與寫入

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.