一、讀寫文件的基礎操作
在C++中,讀寫文件需要用到fstream庫,包含在頭文件中。使用fstream,需構建一個fstream對象,然後通過對象實現文件的讀寫。
讀取文件,步驟如下:
fstream file; // 定義對象 file.open("file.txt", ios::in); // 打開文件 if (!file) // 判斷文件是否打開成功 { cout << "File open failed!" << endl; return -1; } while (!file.eof()) // 判斷是否到達文件末尾 { string line; getline(file, line); // 讀取一行 cout << line << endl; // 輸出讀取的一行 } file.close(); // 關閉文件
以上程序中,首先定義一個fstream對象file,並使用file.open打開文件。通過設置打開方式,我們可以指定文件的讀寫方式,這裡使用ios::in表示文件的讀取操作。接著使用while循環,每次讀取文件的一行並輸出,直到讀取到文件末尾。最後關閉文件。
寫入文件,步驟如下:
ofstream file; // 定義對象 file.open("file.txt", ios::out | ios::app); // 打開文件,以追加方式寫入 if (!file) // 判斷文件是否打開成功 { cout << "File open failed!" << endl; return -1; } file << "Hello, world!" << endl; // 寫入一行數據 file.close(); // 關閉文件
以上程序中,首先定義一個ofstream對象file,並使用file.open打開文件。通過設置打開方式,我們可以指定文件的讀寫方式,這裡使用ios::out表示文件的寫入操作。由於我們要在文本文件的最後添加新的內容,故使用了ios::app,表示以追加方式打開文件。接著使用file << 將數據寫入文件中,並使用endl表示換行符。最後關閉文件。
二、二進位文件讀寫
二進位文件是一種非文本格式的文件,能夠以最小的存儲空間保存數據。在C++中,我們可以使用二進位方式打開文件,並進行讀寫操作。
讀取二進位文件,步驟如下:
struct Person { string name; int age; }p; fstream file; file.open("file.bin", ios::in | ios::binary); // 以二進位方式打開文件 if (!file) // 判斷文件是否打開成功 { cout << "File open failed!" << endl; return -1; } file.read((char*)&p, sizeof(Person)); // 讀取一個Person對象 cout << p.name << " " << p.age << endl; // 輸出讀取的結果 file.close();
以上程序中,定義了一個Person結構體表示一個人的姓名和年齡。我們使用fstream對象file以二進位方式打開文件,通過設置打開方式,我們可以指定文件的讀寫方式,這裡使用ios::in表示文件的讀取操作。使用file.read讀取一個Person對象,其中第一個參數為一個字元型指針,用於存儲讀取的數據,我們需要將指針強制轉換成(char*),以便讀取二進位數據。第二個參數表示要讀取的位元組數。最後輸出讀取的結果。關閉文件。
寫入二進位文件,步驟如下:
fstream file; file.open("file.bin", ios::out | ios::binary); // 以二進位方式打開文件,以寫入操作 if (!file) { cout << "File open failed!" << endl; return -1; } Person p = { "Tom", 20 }; // 定義一個Person對象 file.write((char*)&p, sizeof(Person)); // 將Person對象寫入文件中 file.close();
以上程序中,首先定義一個fstream對象file,並使用file.open打開文件,通過設置打開方式,我們可以指定文件的讀寫方式,這裡使用ios::out表示文件的寫入操作。定義一個Person對象,並使用file.write將其寫入文件中。注意,在寫入數據的時候需要使用強制類型轉換。
三、錯誤處理
在C++中,文件讀寫操作可能會遇到各種錯誤,導致程序異常終止。為了保證程序的可靠性,在進行文件讀寫操作時,我們需要進行適當的錯誤處理。
fstream file; file.open("file.txt", ios::in); if (!file) { cerr << "File open failed!" << endl; // cerr用於輸出錯誤信息到標準錯誤輸出 return -1; }
以上程序使用了cerr流對象來輸出錯誤信息,cerr是C++標準庫定義的一個錯誤輸出流,它跟cout流類似可以用來輸出信息,不過它主要用於將程序中的運行時異常信息輸出到標準錯誤輸出(stderr)中。
四、小結
本文從基礎操作、二進位文件讀寫、錯誤處理三個方面詳細介紹了C++文件讀寫的實現方法。良好的文件讀寫方案不僅能夠提升程序的效率,還能夠保證程序的可靠性。通過清晰的程序結構和適當的錯誤處理,我們可以在C++中實現快速、高效、可靠的數據存儲和讀取。
原創文章,作者:SBBPQ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/317131.html