Linux C++中文件操作有哪些
在Linux环境下玩转C++文件操作 说到在Linux环境下用C++处理文件,开发者手里通常有两把“钥匙”:一把是C++标准库自带的,另一把则是经典的C语言标准I/O库。这两套工具各有各的脾气,用对了地方,文件读写就能变得行云流水。 下面咱们就来详细拆解一下这两套方法的核心操作,看看它们具体怎么用。
在Linux环境下玩转C++文件操作
说到在Linux环境下用C++处理文件,开发者手里通常有两把“钥匙”:一把是C++标准库自带的,另一把则是经典的C语言标准I/O库。这两套工具各有各的脾气,用对了地方,文件读写就能变得行云流水。

下面咱们就来详细拆解一下这两套方法的核心操作,看看它们具体怎么用。
C++标准库 :面向对象的优雅之选
如果你偏爱C++的面向对象风格,那么会是你的菜。它把文件封装成了流对象,用起来直观又省心。
文件打开
开门第一件事,自然是打开文件。
提供了三种流类:std::ifstream infile("example.txt"); // 专用于读取的文件输入流 std::ofstream outfile("example.txt"); // 专用于写入的文件输出流 std::fstream file("example.txt", std::ios::in | std::ios::out); // 既能读又能写的文件流检查文件是否成功打开
文件路径不对、权限不足?打开操作可能失败。所以,养成好习惯,先检查一下:
if (!infile.is_open()) { std::cerr << "Unable to open file for reading!" << std::endl; }读取文件
文件打开了,怎么读数据?这里有几种常见姿势:
- 逐字符读取:适合精细处理每个字符的场景。
char ch; while (infile.get(ch)) { std::cout << ch; } - 逐行读取:处理文本文件时最常用的方法,配合
std::getline非常方便。std::string line; while (std::getline(infile, line)) { std::cout << line << std::endl; } - 读取固定大小的数据块:对于二进制文件或需要高效读取大量数据时,这招很管用。
char buffer[1024]; while (infile.read(buffer, sizeof(buffer))) { // 处理buffer中的数据 }
- 逐字符读取:适合精细处理每个字符的场景。
写入文件
说完了读,再来看看怎么写。写入同样灵活多样:
- 写入字符串:像用
std::cout一样自然。outfile << "Hello, World!" << std::endl; - 写入字符数组:直接写入原始数据。
const char* data = "Some data"; outfile.write(data, strlen(data)); - 写入固定大小的数据块:高效写入二进制数据的首选。
char buffer[1024] = "Some data"; outfile.write(buffer, sizeof(buffer));
- 写入字符串:像用
关闭文件
好习惯是成功的一半。用完文件,记得显式关闭流,释放资源:
infile.close(); outfile.close(); file.close();文件指针操作
想在文件里“跳转”吗?通过操作文件指针,你可以轻松定位到任意位置:
infile.seekg(0, std::ios::beg); // 移动到文件开头 infile.seekg(10, std::ios::cur); // 从当前位置向后移动10个字节 infile.seekg(-10, std::ios::end); // 从文件末尾向前移动10个字节 outfile.seekp(0, std::ios::beg); // 移动到文件开头(写入指针) outfile.seekp(10, std::ios::cur); // 从当前位置向后移动10个字节 outfile.seekp(-10, std::ios::end); // 从文件末尾向前移动10个字节
C语言标准I/O库 :经典底层的灵活控制
如果你需要更底层的控制,或者项目本身混合了C代码,那么经典的C标准库(在C++中常写作)依然是利器。它的函数式接口非常直接。
文件打开
通过
fopen函数,并用模式字符串指定打开方式:FILE* file = fopen("example.txt", "r"); // 只读打开 FILE* file = fopen("example.txt", "w"); // 只写打开(会清空原文件) FILE* file = fopen("example.txt", "a"); // 追加模式打开 FILE* file = fopen("example.txt", "r+"); // 读写模式打开检查文件是否成功打开
fopen失败会返回NULLif (file == NULL) { perror("Unable to open file"); return 1; }读取文件
- 逐字符读取:使用
fgetc函数。int ch; while ((ch = fgetc(file)) != EOF) { putchar(ch); } - 逐行读取:
fgets函数是处理文本行的老朋友。char line[1024]; while (fgets(line, sizeof(line), file)) { printf("%s", line); } - 读取固定大小的数据块:对于二进制数据,
fread是高效的选择。char buffer[1024]; size_t bytesRead; while ((bytesRead = fread(buffer, 1, sizeof(buffer), file)) > 0) { // 处理buffer中的数据 }
- 逐字符读取:使用
写入文件
- 写入字符串:
fprintf和printf用法类似,非常直观。fprintf(file, "Hello, World!\n"); - 写入字符数组:同样可以用
fprintf。const char* data = "Some data"; fprintf(file, "%s", data); - 写入固定大小的数据块:
fwrite是fread的孪生兄弟,用于二进制写入。char buffer[1024] = "Some data"; fwrite(buffer, 1, sizeof(buffer), file);
- 写入字符串:
关闭文件
和C++一样,用完记得
fclose:fclose(file);文件指针操作
在C接口中,使用
fseek函数来移动文件指针:fseek(file, 0, SEEK_SET); // 移动到文件开头 fseek(file, 10, SEEK_CUR); // 从当前位置向后移动10个字节 fseek(file, -10, SEEK_END); // 从文件末尾向前移动10个字节
简单总结一下:C++的提供了更现代、更面向对象的封装,与C++的其他部分(如字符串)集成得更好,写起来往往更简洁。而C的则更为底层和灵活,在某些追求极致性能或需要与大量C代码交互的场景下不可替代。具体选哪套,就得看你的项目需求和个人的编程风格偏好了。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















