c++怎么读取文件里的内容和往文件里写入数据
在 C++ 中,读取和写入文件主要通过 <fstream>
头文件提供的类来实现。以下是详细的方法和示例:
1. 包含必要的头文件
#include <fstream> // 文件流操作
#include <string> // 使用字符串
#include <iostream> // 输入输出
2. 写入文件
使用 ofstream (输出文件流)
#include <fstream>
#include <iostream>int main() {// 创建输出文件流对象std::ofstream outFile;// 打开文件(如果文件不存在会自动创建)outFile.open("example.txt");// 检查文件是否成功打开if (!outFile.is_open()) {std::cout << "无法打开文件!" << std::endl;return 1;}// 写入数据outFile << "Hello, World!" << std::endl;outFile << "这是第二行" << std::endl;outFile << 123 << " " << 45.67 << std::endl;// 关闭文件outFile.close();std::cout << "数据写入成功!" << std::endl;return 0;
}
简化的写入方式
#include <fstream>int main() {// 使用构造函数直接打开文件std::ofstream outFile("example.txt");if (outFile) { // 检查文件是否成功打开outFile << "简化方式写入数据" << std::endl;outFile << "自动会在析构时关闭文件" << std::endl;}return 0;
}
3. 读取文件
使用 ifstream (输入文件流)
#include <fstream>
#include <iostream>
#include <string>int main() {// 创建输入文件流对象std::ifstream inFile;inFile.open("example.txt");if (!inFile.is_open()) {std::cout << "无法打开文件!" << std::endl;return 1;}std::string line;// 逐行读取文件内容while (std::getline(inFile, line)) {std::cout << line << std::endl;}inFile.close();return 0;
}
其他读取方式
#include <fstream>
#include <iostream>
#include <string>int main() {std::ifstream inFile("example.txt");if (inFile) {// 方式1:逐词读取std::string word;while (inFile >> word) {std::cout << "单词: " << word << std::endl;}// 清空文件状态并重新定位到开头inFile.clear();inFile.seekg(0);// 方式2:读取单个字符char ch;while (inFile.get(ch)) {std::cout << ch;}}return 0;
}
4. 同时读写文件
使用 fstream
#include <fstream>
#include <iostream>int main() {// 打开文件用于读写std::fstream file("data.txt", std::ios::in | std::ios::out | std::ios::app);if (file.is_open()) {// 写入数据file << "新数据" << std::endl;// 移动到文件开头file.seekg(0);// 读取数据std::string content;while (std::getline(file, content)) {std::cout << content << std::endl;}file.close();}return 0;
}
5. 二进制文件操作
#include <fstream>
#include <iostream>struct Data {int id;double value;char name[20];
};int main() {// 写入二进制数据Data data = {1, 3.14, "Test"};std::ofstream outFile("binary.dat", std::ios::binary);if (outFile) {outFile.write(reinterpret_cast<char*>(&data), sizeof(Data));outFile.close();}// 读取二进制数据Data readData;std::ifstream inFile("binary.dat", std::ios::binary);if (inFile) {inFile.read(reinterpret_cast<char*>(&readData), sizeof(Data));std::cout << "ID: " << readData.id << ", Value: " << readData.value << ", Name: " << readData.name << std::endl;inFile.close();}return 0;
}
6. 文件打开模式
模式标志 | 描述 |
---|---|
std::ios::in | 打开用于读取 |
std::ios::out | 打开用于写入 |
std::ios::app | 追加模式(在文件末尾写入) |
std::ios::ate | 打开后定位到文件末尾 |
std::ios::trunc | 如果文件存在,先截断 |
std::ios::binary | 二进制模式 |
重要提示
- 总是检查文件是否成功打开
- 记得关闭文件(虽然析构函数会自动关闭,但显式关闭是好习惯)
- 处理可能的异常(文件不存在、权限问题等)
- 使用合适的打开模式
- 二进制文件操作时要注意数据对齐和字节顺序
这些是 C++ 中文件操作的基本方法,根据具体需求选择合适的方式。