1. 程式人生 > 其它 >cpp中檔案的輸入輸出

cpp中檔案的輸入輸出

技術標籤:指標pythonjavalinuxc++

目錄[-]


cpp中檔案的輸入輸出方式與處理標準的輸入輸出方式非常相似,要寫入檔案,需建立一個ofstream物件,並使用ostream方法,如<<插入運算子或write(); 要讀取檔案,需建立一個ifstream物件,並使用istream方法,如>>抽取運算子或get()。


1、開啟檔案模式

預設情況下,開啟一個檔案會自動將檔案清空。
ios_base::in 開啟檔案,以便讀取
ios_base::out 開啟檔案,以便寫入
ios_base::ate 開啟檔案,並移到檔案尾
ios_base::app 追加到檔案尾

ios_base::trunc 如果檔案存在,則截短
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物件中並沒有儲存具體的字串,而是包含了一個指向儲存了字串的記憶體單元的指標,因此在將結構體儲存到檔案中時,儲存的不是字串資料,而是指向字串資料的指標,當再次讀取該資料時,指標將變得無意義。