cpp中檔案的輸入輸出
阿新 • • 發佈:2020-12-18
目錄[-]
cpp中檔案的輸入輸出方式與處理標準的輸入輸出方式非常相似,要寫入檔案,需建立一個ofstream物件,並使用ostream方法,如<<插入運算子或write(); 要讀取檔案,需建立一個ifstream物件,並使用istream方法,如>>抽取運算子或get()。
1、開啟檔案模式
預設情況下,開啟一個檔案會自動將檔案清空。
ios_base::in 開啟檔案,以便讀取
ios_base::out 開啟檔案,以便寫入
ios_base::ate 開啟檔案,並移到檔案尾
ios_base::app 追加到檔案尾
ios_base::binary 二進位制檔案
ios_base: : ate與ios_base::app的區別在於ios_base: : ate只允許將資料新增到檔案尾。另一個則為把指標放到檔案尾。
2、寫入檔案過程
# 建立ofstream物件來管理輸出流 ofstream fout; # 將物件與檔案關聯起來。 fout.open("shawn.txt");//開啟檔案,預設為截短模式 fout.open("shawn.txt",ios_base::out|ios_base::app );//開啟檔案,新增的內容追加到檔案尾 # 將元素寫入檔案 fout<<"shawn"<<endl;
3、確認檔案是否正確開啟
fin.open("shawn.txt");//開啟檔案,預設為截短模式
if(fin.is_open()){
.
.
.
}
4、打印出檔案中的所有內容
char ch;
while (fin.get(ch))
cout << ch;
5、儲存格式區別
資料可以以二進位制或文字格式進行儲存。使用文字格式儲存的優點是比較通用且易於讀取,使用二進位制儲存是儲存的計算機內部表示,不會降低精度,但是在不同系統或者相同相同,不同編譯器情況下由於內部表示不同,而無法正常讀取資料。
通常情況下以文字儲存的檔案字尾設定為.txt,該型別檔案可以使用notepad開啟,以二進位制儲存的檔案字尾設定為.dat,該檔案無法使用notepad開啟,即使能夠開啟,顯示的也是亂碼。
struct classData{
char teacherName[30];
double score;
int numberOfStudents;
};
classData class_1;
//以下為寫入過程
ofstream fout("class_1.txt",ios_base::out|ios_base::app );
fout<<class_1.teacherName<<" "<<class_1.score<<" "<<class_1.numberOfStudents<<"\n";
•以二進位制形式儲存例
struct classData{
char teacherName[30];
double score;
int numberOfStudents;
};
classData class_1;
//以下為寫入過程
ofstream fout("class_1.dat",ios_base::out|ios_base::app|ios_base::binary);
fout.write((char *) &class_1,sizeof(class_1));
•讀取二進位制形式儲存的檔案例
struct classData{
char teacherName[30];
double score;
int numberOfStudents;
};
classData class_2;
//以下為檔案讀入過程
ifstream fin("class_2.dat",ios_base::in|ios_base::binary);
fin.read((char *) &class_2,sizeof(class_2));
read()和write()成員函式為對偶函式,必須使用read()來回複用write()寫入的檔案。
注意事項:在此方法中的結構體,不能使用string代替char陣列,原因是string物件中並沒有儲存具體的字串,而是包含了一個指向儲存了字串的記憶體單元的指標,因此在將結構體儲存到檔案中時,儲存的不是字串資料,而是指向字串資料的指標,當再次讀取該資料時,指標將變得無意義。