目錄
二、核心類及功能
三、核心操作示例
1. 文本文件寫入(ofstream)
2. 文本文件讀取(ifstream)
3. 二進制文件操作(fstream)
四、文件打開模式
五、文件指針操作
六、錯誤處理技巧
七、實際應用場景
一、<fstream>?的核心功能
??<fstream>
?是 C++ 標準庫中處理文件輸入輸出的關鍵組件,提供以下核心功能:
????????文本/二進制文件讀寫、文件流狀態管理、文件指針定位、多種文件打開模式控制
二、核心類及功能
類名 | 繼承關系 | 功能描述 | 典型用途 |
---|---|---|---|
ofstream | 繼承自?ostream | 輸出文件流(寫操作) | 創建/覆蓋文件內容 |
ifstream | 繼承自?istream | 輸入文件流(讀操作) | 讀取文件內容 |
fstream | 繼承自?iostream | 雙向文件流(讀寫操作) | 同時讀寫文件 |
三、核心操作示例
1. 文本文件寫入(ofstream)
#include <fstream>int main() {std::ofstream outFile("data.txt"); // 自動打開文件if (outFile) { // 檢查是否打開成功outFile << "Line 1: 文本內容\n"; // 寫入字符串outFile << "Line 2: " << 42 << "\n"; // 寫入混合數據outFile << 3.14 << "\n"; // 寫入浮點數} else {std::cerr << "文件打開失敗!";}// 文件會在對象銷毀時自動關閉return 0;
}
生成文件內容:
Line 1: 文本內容
Line 2: 42
3.14
2. 文本文件讀取(ifstream)
#include <fstream>
#include <iostream>int main() {std::ifstream inFile("data.txt");if (inFile.is_open()) {std::string line;while (std::getline(inFile, line)) { // 逐行讀取std::cout << "讀取內容: " << line << "\n";}} else {std::cerr << "文件不存在!";}return 0;
}
輸出結果:
讀取內容: Line 1: 文本內容
讀取內容: Line 2: 42
讀取內容: 3.14
3. 二進制文件操作(fstream)
#include <fstream>
#include <iostream>struct DataPacket {int id;double value;char tag[20];
};int main() {// 寫入二進制數據DataPacket data{1001, 3.1415926, "binary"};std::ofstream binOut("data.bin", std::ios::binary);binOut.write(reinterpret_cast<char*>(&data), sizeof(data));// 讀取二進制數據DataPacket loaded;std::ifstream binIn("data.bin", std::ios::binary);binIn.read(reinterpret_cast<char*>(&loaded), sizeof(loaded));std::cout << "ID: " << loaded.id << "\nValue: " << loaded.value << "\nTag: " << loaded.tag;return 0;
}
輸出結果:
ID: 1001
Value: 3.14159
Tag: binary
四、文件打開模式
通過位或操作符?|
?組合使用多種模式:
std::fstream file("data.txt", std::ios::in | // 可讀std::ios::out | // 可寫std::ios::app | // 追加模式std::ios::binary); // 二進制模式
模式標志 | 功能描述 |
---|---|
std::ios::in | 以讀取模式打開文件 |
std::ios::out | 以寫入模式打開文件 |
std::ios::app | 追加模式(不覆蓋原有內容) |
std::ios::ate | 打開時定位到文件末尾 |
std::ios::trunc | 如果文件存在則清空內容 |
std::ios::binary | 以二進制模式操作文件 |
五、文件指針操作
std::fstream file("data.txt", std::ios::in | std::ios::out);// 定位到第10字節處
file.seekg(10, std::ios::beg); // 輸入指針(讀取位置)
file.seekp(10, std::ios::beg); // 輸出指針(寫入位置)// 獲取當前指針位置
std::streampos readPos = file.tellg();
std::streampos writePos = file.tellp();
六、錯誤處理技巧
std::ifstream file("missing.txt");// 檢查文件狀態
if (file.fail()) {std::cerr << "錯誤代碼: " << errno << std::endl;
}// 重置錯誤狀態
file.clear();
七、實際應用場景
-
配置文件讀寫:使用文本模式處理?
.ini
?文件 -
數據持久化:用二進制格式保存游戲進度
-
日志系統:用追加模式記錄程序運行日志
-
大數據處理:通過文件指針隨機訪問大型數據文件
通過以上示例和說明,可以全面掌握?<fstream>
?庫的核心用法。實際開發中需注意:
-
二進制操作時確保數據的內存布局一致
-
文件路徑使用絕對路徑或正確相對路徑
-
及時處理文件流的狀態異常