標籤:
1 簡單讀寫檔案
1 #include <fstream> 2 ofstream //檔案寫操作 記憶體寫入存放裝置 3 ifstream //檔案讀操作,存放裝置讀區到記憶體中 4 fstream //讀寫操作,對開啟的檔案可進行讀寫操作
寫檔案用ofstream和ostream方法(如<<),讀檔案用ifstream和istream方法(如>>),讀寫檔案可以用fstream,具體步驟個人總結為三步走:
寫檔案:
1.建立一個ofstream對象 ofstream out;
2.將對象與檔案進行關聯 out.open("1.txt");
3.用cout方式使用該對象 out<<"123456";
其中前兩步可以合并為ofstream out("1.txt");
讀檔案:
1.建立一個ifstream對象 ifstream in;
2.將對象與檔案進行關聯 in.open("1.txt");
3.用cout方式使用該對象 string x; int>>x;
其中前兩步可以合并為ifstream in("1.txt");
注意:對象名稱可以隨意命名,不一定非得是in或out。
檔案讀寫完畢後檔案自動關閉,亦可顯示的關閉檔案的串連,比如in.close();
2 檔案模式
無論是使用檔案名稱初始設定檔案流對象還是使用open()方法,都可以指定檔案模式的第二個參數
ios::in 開啟檔案以便讀取
ios::out 開啟檔案以便寫入
ios::ate 開啟檔案移動到檔案尾
ios::app 內容追加到檔案尾
ios::trunc 刪除之前內容再寫入
ios::binary 二進位檔案
這些方式是能夠進行組合使用的,以“或”運算(“|”)的方式:例如
1 fstream out("Hello.txt", ios::in|ios::out)
3 一個複製檔案的例子
1 #include <iostream> 2 #include <fstream> 3 #include <cstdlib> 4 5 using namespace std; 6 void cpf(char *a,char *b); 7 8 int main() 9 {10 char sourcefile[100];11 char copyfile[100];12 cout<<"請輸入要複製的檔案路徑"<<endl;13 cin>>sourcefile;14 cout<<"請輸入要粘貼的檔案路徑"<<endl;15 cin>>copyfile;16 17 cpf(sourcefile,copyfile);18 19 return 0;20 }21 22 void cpf(char *a,char *b)23 {24 fstream in(a,ios::in | ios::binary);25 if(!in.is_open())26 {27 cerr<<"源檔案不存在"<<endl;28 exit(EXIT_FAILURE);29 }30 fstream out(b,ios::out | ios::binary);31 if(!in.is_open())32 {33 cerr<<"路徑錯誤"<<endl;34 exit(EXIT_FAILURE);35 }36 out<<in.rdbuf();37 cout<<"檔案複製成功"<<endl;38 }
需要注意的地方
1.檔案路徑是char數組,傳遞參數時應該將形參設為指標
2.複製檔案應該用ios::binary(二進位模式),原因是使用二進位檔案模式時,程式將資料從記憶體傳遞給檔案,將不會發生任何隱藏的轉換,而預設狀態下是文字模式,複製的內容可能會發生改變(參見c++ primer plusP695)
3.關於 rebuf():複製檔案時是從一個流對象複製流入另外一個流對象,需要使用rebuf(),rebuf()的功能就是使流重新導向
4.exit(EXIT_FAILURE)相當於exit(1),exit(EXIT_SUCCESS)相當於exit(0)
C++檔案讀寫