標籤:

(6)C++——文件操作

(6)C++——文件操作

ifstream, ofstream, fstream ——文件流類

基本流程:打開文件——>讀/寫文件——>關閉文件

建立順序文件

文件操作的頭文件:<fstream>

#include<fstream>ofstream outFile("clients.dat", ios::out|ios::binary);//另一種方法ofstream foutfout.open("test.out", ios::out|ios::binary);//判斷打開是否成功if(!fout){cerr<<"File open error!"<<endl;}

打開並建立文件的選項:

  • ios::out 輸出到文件,刪除原有內容

  • ios::app 輸出到文件,保留原有內容

  • ios::in 讀取文件

  • ios::binary 以二進位形式打開文件

文件內操作:

文件的讀寫指針:

寫指針:

  • 獲取: .tellp()

  • 操作指針: .seekp()

讀指針:

  • 獲取:.tellg()

  • 操作指針:.seekg()

//寫文件ofstream fout("a1.out", ios::app);long location = fout.tellp(); //取得寫指針的位置location = 10L;fout.seekp(location); //將寫指針移動到第10個位元組處fout.seekp(location, ios::beg); //從頭數locationfout.seekp(location, ios::cur); //從當前位置數locationfout.seekp(location, ios::end); // 從尾部數location//讀文件ifstream fin("a1.in", ios::in);long location = fin.tellg();location = 10L;fin.seekg(location);fin.seekg(location, ios::beg);fin.seekg(location, ios::cur);fin.seekg(location, ios::end);

二進位文件的讀寫:

  • .write(地址參數,大小參數)

  • .read(地址參數,大小參數)

int x = 10;fout.seekp(20, ios::beg);fout.write((const char*)(&x), sizeof(int));fin.seekg(0, ios::beg);fin.read((char*)(&x), sizeof(int));

連續寫文件和連續讀一個文件的內容的方法:

寫:

while(cin >>…… ){

if(…… )//名字為exit 則結束

break;

OutFile.write((char*)&s, sizeof(s));}

讀:

while(iofile.read((char *) &s, sizeof(s)))

cout << …… << endl;

例子:二進位讀寫

#include<iostream>#include<fstream>#include<cstring>using namespace std;class CStudent{public: char szName[20]; int nScore;};//寫int main(){ CStudent s; ofstream OutFile("C:\tmp\student.dat", ios::out|ios::binary); while(cin >> s.szName >> s.nScore ){ if(stricmp(s.szName, "exit") == 0 )//名字為exit 則結束 break; OutFile.write((char*)&s, sizeof(s)); } OutFile.close(); return 0;}//讀int main(){CStudent s;ifstream inFile("student.dat", ios::in|ios::binary);if(!inFile){ cout << "error" << endl; return 0;}while(inFile.read((char *) &s, sizeof(s))){ int nReadedBytes = inFile.gcount(); //看剛才讀了多少位元組 cout << s.szName << " " << s.score << endl;}inFile.close();return 0 ;}}//修改int main(){CStudent s;fstream iofile("C:\tmp\students.dat", ios::in|ios::out|ios::binary);if(!iofile){ cout << "error"; return 0;}iofile.seekp(2*sizeof(s), ios::beg);//定位寫指針到第三個記錄iofile.write("Mike", strlen("Mike")+1);iofile.seekg(0,ios::beg);while(iofile.read((char *) &s, sizeof(s))) cout << s.szName << " " << s.nScore << endl;iofile.close();return 0;}

#include<iostream>#include<fstream>#include<cstring>#include<string>using namespace std;int main(int argc, char *argv[]){//第一個變數表示輸入的變數數,第二個是文件地址指針 if(argc != 3){ cout << "File name missing !" <<endl; return 0; } ifstream inFile(argv[1],ios::binary|ios::in);//打開文件用於讀 if(!inFile){ cout << "Source file open error." << endl; return 0; } ofstream outFile(argv[2],ios::binary|ios::out);//打開文件用於寫 if(!outFile){ cout << "New file open error." << endl; inFile.close();//打開的文件一定要關閉 return 0; } char c; while(inFile.get(c))//每次讀取一個字元 outFile.put(c);//每次寫入一個字元 outFile.close(); inFile.close(); return 0;}

推薦閱讀:

關於離別的詩句
淺談馬基雅維利的「命運與德性」主題
《美國大城市的死與生》讀書報告
《從0到1》讀書筆記——

TAG:C | 讀書筆記 |