2026-05-31 03:19:12
在C++中读取文件需使用fstream头文件提供的类,根据文件类型(文本或二进制)选择不同的打开模式和处理逻辑。以下是详细方法及示例:
一、文本文件读取方法文本文件由可读字符组成,通常以换行符分隔内容。使用std::ifstream可逐行、逐词或逐字符读取。
基本步骤:
示例代码:按行读取文本文件
#include <iostream>#include <fstream>#include <string>int main() { std::ifstream file("example.txt"); if (!file.is_open()) { std::cerr << "无法打开文件!" << std::endl; return -1; } std::string line; while (std::getline(file, line)) { std::cout << line << std::endl; } file.close(); return 0;}关键点:
二进制文件存储原始字节数据(如图片、音频),需以std::ios::binary模式打开,使用read()函数读取到缓冲区。
基本步骤:
示例代码:读取二进制文件到缓冲区
#include <iostream>#include <fstream>#include <vector>int main() { std::ifstream file("data.bin", std::ios::binary); if (!file.is_open()) { std::cerr << "无法打开二进制文件!" << std::endl; return -1; } // 获取文件大小 file.seekg(0, std::ios::end); size_t fileSize = file.tellg(); file.seekg(0, std::ios::beg); // 分配内存并读取数据 std::vector<char> buffer(fileSize); file.read(buffer.data(), fileSize); if (file) { std::cout << "成功读取 " << fileSize << " 字节" << std::endl; } else { std::cerr << "读取失败或不完整" << std::endl; } file.close(); return 0;}关键点:
Windows:文本模式自动转换rn为n,二进制模式不修改。
Linux/macOS:换行符统一为n,差异较小,但仍建议显式指定模式。
文本模式:std::ios::in(默认)。
二进制模式:std::ios::in | std::ios::binary。
示例:显式指定二进制模式
std::ifstream file("test.dat", std::ios::binary);四、常见注意事项无指针成员。
内存布局一致(可通过#pragma pack控制对齐)。
掌握这两种方法后,可灵活处理配置文件、日志、图片、音频等各类文件需求。