示例闡述C++中的文件操作
C語言文件操作
C++語言是C語言的超集,是在C語言的基礎上增加了面向對象的特性而創造出來的,最初被命名為帶類的C。所以C++語言中包含了C語言的思想,如:C++語言中文件操作的原理與步驟與C語言基本相同,請對比C語言中的文件操作,來學習和理解C++中的文件操作。以下是C語言文件操作的Blog連接:
C++語言文件操作
C++語言中標準庫fstream,提供了有關文件操作所需的條件。
- 與文件操作相關的數據類型
- ifstream
- 輸入文件流,用於從文件讀取信息
- 使用其對象打開文件時,預設為:ios::in
- ostream
- 輸出文件流,用於創建文件(若關聯的文件不存在)並向文件寫入信息
- 使用其對象打開文件時,預設為:ios::out
- fstream
- 文件流,具備ifstream與ostream的功能
- 使用其對象打開文件時,預設為:ios::in | ios::out
- ifstream
文件的打開模式
標誌 含義 ios::app 追加模式,將所有寫入的內容追加到文件末尾 ios::ate 文件打開後定位到文件末尾 ios::in 打開文件用於讀取 ios::out 打開文件用於寫入 ios::trunc 若文件已經存在,其內容將在打開文件之前被截斷,即把文件長度設為0(文件內容會被清空) - 文件操作的步驟
打開文件,可以使用以下函數打開文件:
// 使用char類型字元串指定文件名和位置 void open(const char* __s, ios_base::openmode __mode = ios_base::in | ios_base::out) // 使用string類型字元串指定文件名和位置 void open(const string& __s, ios_base::openmode __mode = ios_base::in | ios_base::out)
- 操作文件
讀取文件
// 使用流提取運算符 >>,讀取到空格時會結束 // 使用 get() 函數 basic_istream& get(char_type* __s, streamsize __n); // 使用 getline() 函數 basic_istream& getline(char_type* __s, streamsize __n); // 使用 read() basic_istream& read (char_type* __s, streamsize __n); // 使用 readsome() 函數, 註意函數的返回值類型不是 basic_istream& streamsize readsome(char_type* __s, streamsize __n);
寫入文件
// 使用流插入運算服務 << // 使用 put() 函數,一次只能寫入一個字元 basic_ostream& put(char_type __c); // 使用 write() 函數 basic_ostream& write(const char_type* __s, streamsize __n);
關閉文件
// 使用 close() 函數 void close();
文件位置重定位
查找方向
標誌 含義 ios::beg 預設的方向,從流的開頭開始定位 ios::cur 從流的當前位置開始定位 ios::end 從流的末尾開始定位 - 文件位置重定位相關的函數
輸入流相關
// __pos 指定位置,查找方向為預設方向:從流的開頭開始向後定位。即:定位到流的第 __pos 個位元組 basic_istream& seekg(pos_type __pos); // __off 指定偏移量,__dir 指定查找方向。即:按 __dir 指定的查找方向偏移 __off 位元組 basic_istream& seekg(off_type __off, ios_base::seekdir __dir);
輸出流相關
// __pos 指定位置,查找方向為預設方向:從流的開頭開始向後定位。即:定位到流的第 __pos 個位元組 basic_ostream& seekp(pos_type __pos); // __off 指定偏移量,__dir 指定查找方向。即:按 __dir 指定的查找方向偏移 __off 位元組 basic_ostream& seekp(off_type __off, ios_base::seekdir __dir);
示例
讀取文件
void readFromFile() { // 創建一個字元數組,用於暫存用戶輸入的數據 char data[50]; // 打開文件(以讀模式打開文件) ifstream inputFile; inputFile.open("/Users/mac/Desktop/HelloWorld.txt"); // 將文件的讀指針從開始位置向後移動 6 個位元組,即:從文件的第 6 個位元組開始讀取文件的內容 inputFile.seekg(6, ios::beg); // 讀取文件的內容 cout << "Reading from the file" << endl; // 使用 read()函數讀取文件內容到 data 中 inputFile.read(data, 50); cout << data << endl; // 關閉打開的文件 inputFile.close(); }
寫入文件
void writeToFile() { // 創建一個字元數組,用於暫存從文件讀取的數據 char data[50]; // 打開文件(以寫模式打開文件) ofstream outputFile; outputFile.open("/Users/mac/Desktop/HelloWorld.txt"); // 輸入要寫入文件的內容 cout << "Writing to the file" << endl; cout << "Input a message:" << endl; cin.getline(data, 50); // 使用 write() 函數,將data數據寫入到文件中 outputFile.write(data, 50); // 關閉打開的文件 outputFile.close(); }
main函數
int main(int argc, const char * argv[]) { // 寫入文件 writeToFile(); // 讀取文件 readFromFile(); return 0; }
運行結果如圖