檔案的輸入輸出流詳解

2021-10-10 03:43:29 字數 4349 閱讀 6151

c++中的檔案的開啟方式

解釋ios::in

以唯讀方式開啟檔案

ios::out

以寫檔案的方式開啟檔案

ios::ate(at the end的簡寫)

檔案的初始操作位置:檔案尾部

在檔案尾部寫檔案

ios::trunc(truncate的簡寫)

清除檔案內容

ios::binary

以二進位制的方式操作檔案

c++檔案開啟方式

c語言檔案開啟方式

解釋ios::in

r唯讀方式開啟檔案

ios::out

w只寫方式開啟檔案

a追加方式開啟只寫檔案

ios::in+ios::out

+可讀可寫

ios::binary

b以二進位制方式開啟檔案

無(預設檔案開啟方式)

t以文字方式開啟檔案(預設方式下以文字方式開啟檔案)

ios::in+ios::out

r+以可讀可寫的方式開啟檔案

ios::in+ios::out+ios::binary

rb+以可讀可寫、二進位制方式開啟檔案

ios::in+ios::out

rt+以可讀可寫、文字方式開啟檔案

a+以追加、可讀寫的方式開啟檔案

ios::in+ios::out

w+以讀寫的方式開啟檔案

① 宣告對應的標頭檔案:

輸出檔案流

輸入檔案流

輸入輸出檔案流

ofstream

ifstream

fstream

② 建立相應的輸入輸出流物件;

③ 開啟相應的檔案(其實②,③步可以合併),並判斷檔案是否可以正常開啟;

④ 對檔案進行相應的讀寫操作;

⑤ 關閉檔案流,注意:當你不關閉檔案時,系統是無法將快取區內的資料寫入到檔案當中的。

#include // 宣告相應的標頭檔案  

#include using namespace std;  

int main()  

ofs <

ofs.close(); // 關閉檔案流,將快取區內的資料寫入檔案當中  

}

文字檔案的讀操作,其實如果我們乙個字元乙個字元的讀入,最終都是讀入的ascii字元,我們如果需要其它型別的資料,我們必須將ascii強轉為其它型別,所用的強轉函式如下:

強轉函式名稱

函式呼叫格式

atof

double atof (const char* str)

atoi

int atoi (const char * str)

atol

long int atol ( const char * str )

atoll

long long int atoll ( const char * str )

#include #include #include using namespace std;  

int main()  

第一種讀入方式  

//char buffer[1024] = ;  

//while (ifs >> buffer) // 以單個ascii(字元)為單位進行讀操作  

//  

// 第二種讀入方式  

string buffer;  

while (getline(ifs, buffer)) // 以整行為單位進行讀操作  

ifs.close();  

}

方法一:

// 第一種讀入方式  

char buffer[1024] = ;  

while (ifs >> buffer) // 以單個ascii(字元)為單位進行讀操作  

方法二:

// 第二種讀入方式  

string buffer;  

while (getline(ifs, buffer)) // 以整行為單位進行讀操作  

函式名函式原型

解釋wirte

write(const char* buffer,  size_t buffer_size)

從以buffer為首的字元型陣列中一次性讀取buffer_size個字元以二進位制的方式寫入檔案中

#include #include using namespace std;  

int main()  

ofs.write((const char*)"c++ cheer!", sizeof(char) * 9); // 以二進位制方式將內容寫入檔案(其實,二進位制下英文與文字檔案模式下的無區別,但是漢字有區別會在二進位制下出現亂碼)  

ofs.close(); // 關閉檔案寫信道  

}

函式名稱

函式原型

解析read

read(char* buffer, size_t buffer_size)

一次性讀取buffer_size個字元,裝入以buffer為首位址的字元型陣列中

#include #include using namespace std;  

int main()  

char buffer[1024] = ;  

ifs.read(buffer, sizeof(buffer)); // 二進位制檔案的讀操作  

cout <

ifs.close(); // 關閉檔案流  

}

#include #include #include using namespace std;  

class person  

friend ofstream& operator <

};  

ofstream& operator <

int main()  

ofs <

ofs.close();  

}

函式名說明

函式原型

seekg(用於檔案輸入流)

定位輸入檔案流指標的位置

istream& seekg (int off, ios_base::seekdir way)

seekp(用於檔案輸出流)

定位輸出檔案流指標的位置

ostream& seekp (int off, ios_base::seekdir way)

tellp(用於檔案輸出流)

獲取當前輸出檔案流指標距離檔案頭的位置

tellp(void)

tellg(用於檔案輸入流)

獲取當前輸入檔案流指標距離檔案頭的位置

tellg(void)

函式中的ios_base::seekdir型別的變數可選選項如下:

名稱標識

以當前位置為起點定義偏移量

ios::cur

以檔案開頭位置為起點定義偏移量

ios::beg

以結尾位置為起點定義偏移量

ios::end

#include #include #include using namespace std;  

class person  

~person()  

friend ofstream& operator <

friend ostream& operator <

friend ifstream& operator >> (ifstream& ifs, person& personobject);  

};  

ofstream& operator <

ifstream& operator >> (ifstream& ifs, person& personobject)  

;  // 記得多出來乙個位元組的空間存放』\0』結束符

char age[3] = ;  

if (ifs.is_open() && !ifs.eof())  

return ifs;  

}  ostream& operator <

int main()  

ofs <

ofs.close();  

ifstream ifs("c:\\users\\hgq15\\desktop\\test.txt", ios::in);  

if (!ifs.is_open())  

ifs >> personobject1;  

ifs.close();  

cout <

}

檔案輸入輸出流

學習內容 1.fileinputstream類 常用構造方法 fileinputstream string name 使用檔名建立fileinputstream物件 fileinputstream file file 使用file物件建立fileinputstream物件 2.fileonputst...

C 檔案輸入輸出流

dat 檔案 資料檔案 二進位制檔案字尾名為 bin 文字檔案 字尾名 txt doc.docx wps 以ascii 碼儲存資料的 檔案指標,用於指明其位置 檔案開關 fopen 第二個引數char 型別 需要 括起來 err fopen s fp1,file information.txt a ...

C 檔案輸入輸出流

寫在前面的話 c 中對檔案的操作跟c語言是有很大差別的,因此總結一下c 對檔案的操作。在c 中隊檔案的輸入輸出流和對記憶體的輸入輸出流以及對字串的輸入輸出流介面是一致的,如果輸入流能產生位元組,可以用乙個提取操作符從這個流中獲取資訊。這個提取符產生並格式化目的物件所期望的資訊型別。雖然輸入流用起來很...