1. 文件操作基础与fstream核心机制
现代C++开发中处理文件I/O最常用的工具当属
文件操作的第一步永远是打开文件。构造fstream对象时可以直接指定文件路径和打开模式:
cpp复制std::ifstream inFile("data.txt", std::ios::in); // 只读模式打开
std::ofstream outFile("log.txt", std::ios::app); // 追加模式打开
打开模式通过位掩码组合实现多种控制:
in:读取模式(默认ifstream)out:写入模式(默认ofstream)app:追加写入binary:二进制模式ate:打开后定位到文件尾trunc:清空已有内容
重要提示:二进制文件操作必须指定binary模式,否则在Windows平台可能因换行符转换导致数据损坏。
文件打开后需要检查是否成功:
cpp复制if(!inFile.is_open()) {
std::cerr << "Failed to open file" << std::endl;
return -1;
}
读写操作与标准I/O流完全一致:
cpp复制// 写入示例
outFile << "Record " << i << ": " << data << std::endl;
// 读取示例
std::string line;
while(std::getline(inFile, line)) {
process(line);
}
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 现代C++文件系统操作详解
C++17引入的
path:表示文件系统路径directory_entry:目录项信息directory_iterator:目录遍历器
2.1 路径构造与操作
path类自动处理不同平台的路径分隔符问题:
cpp复制namespace fs = std::filesystem;
fs::path dataDir("C:/Project/data"); // Windows风格
fs::path configFile("/etc/app.conf"); // Unix风格
路径可以进行各种组合和分解:
cpp复制auto fullPath = dataDir / "2023" / "dataset.csv"; // 路径拼接
std::cout << fullPath.filename() << "\n"; // "dataset.csv"
std::cout << fullPath.extension() << "\n"; // ".csv"
经验之谈:始终使用path对象而非字符串处理路径,可以避免90%的跨平台路径问题。
2.2 文件系统查询与操作
cpp复制// 检查文件属性
if(fs::exists(configFile)) {
auto fileSize = fs::file_size(configFile);
auto modTime = fs::last_write_time(con
