Linux C++中文件操作有哪些
在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代码交互的场景下不可替代。具体选哪套,就得看你的项目需求和个人的编程风格偏好了。
相关攻略
Filebeat跨平台日志收集实践指南 一 架构与关键点 面对混合IT环境,如何用一套工具搞定所有主机的日志收集?Filebeat给出了答案。它提供了覆盖Linux、Windows和macOS的安装包,这意味着,你只需要维护同一套简洁的YAML配置,就能在不同操作系统上实现统一的日志采集与输出。其轻
Filebeat日志压缩与归档实践 说到日志管理,很多朋友会问:Filebeat本身能搞定日志的本地压缩和长期归档吗?答案是,这事儿得分两头看。Filebeat的核心任务是采集和转发,它并不包办所有存储和归档的活儿。一个典型的实践方案是:本地用系统工具处理Filebeat自己的日志,防止磁盘爆满;远
Filebeat故障排查实操手册 日志采集管道卡住了?数据流突然中断?别慌,这往往是Filebeat在“报警”。作为数据管道的第一公里,它的稳定至关重要。下面这份实操指南,能帮你像老手一样,快速定位并解决大多数常见问题。 一、快速定位流程 遇到问题,按这个顺序走一遍,十有八九能找到症结所在。 确认服
Filebeat日志格式自定义指南 一 概念澄清 在动手配置之前,先得把两个容易混淆的概念理清楚: Filebeat自身运行日志:这指的是Filebeat这个“搬运工”自己工作时产生的日志,比如它有没有正常启动、遇到了什么错误。这类日志通常输出到磁盘文件或控制台,方便运维人员排错。你可以选择让它以纯
HDFS 快照使用指南 说到数据备份与恢复,HDFS快照绝对是一个高效且轻量的利器。它本质上就是文件系统在某个特定时刻的“只读照片”,专门用于应对误操作或进行历史状态对比。那么,它到底是怎么工作的?简单来说,有以下几个核心特性: 一 核心概念与适用场景 首先,HDFS快照的创建几乎是瞬间完成的,时间
热门专题
热门推荐
元旦一日游:在科技与自然的交汇处漫步 新年的钟声犹在耳畔,2026年的第一个假日便已翩然而至。空气中弥漫着喜庆与松弛的气息,我也决定暂别日常的节奏,加入这人潮涌动的假日行列,来一场计划之外的短途游览。 中午时分,目的地准时抵达。眼前是人头攒动的热闹景象,那份跃跃欲试的心情几乎要破笼而出。不过,一切还
今天元旦 元旦这天,大概是孩子们最快乐的时刻了。你听,大清早的鞭炮声就此起彼伏,宣告着新年的到来。一句“新年快乐”,是这一天最自然而然的开场白。 说到新年,怎么能少得了饺子呢?这几乎是家家户户的保留节目。一家人早早地忙活起来:爸爸负责擀皮,妈妈和我负责包。分工明确,配合默契,不一会儿,一排排白胖胖的
又是一个阳光明媚、万&里无云的好天气 处处弥漫着一股喜气洋洋的气氛,偶尔会有一丝丝凉风拂过脸上抑制不住的笑容。你知道吗?全校师生正齐聚一堂,准备欢庆元旦呢! 活动伊始,场内还有些许嘈杂的声响,但随着几位英姿飒爽的主持人登场,现场顷刻间鸦雀无声,所有人的目光都聚焦在舞台上,专心致志地等待节目开始。 精
光阴似箭,一转眼2026就要和我们说再见了 在年末的最后一天,我们学校举办了一场气氛热烈的运动会,为这一年画上了一个充满活力的句号。 比赛开始了 各项赛事紧锣密鼓地展开,同学们个个摩拳擦掌,做好了充分的赛前准备。首先登场的是我个人最喜欢也最拿手的项目——跳绳。裁判员的口哨声清脆响起,我手中的绳子便立
践行核心价值观演讲稿 本站为您整理了一系列关于践行社会主义核心价值观的演讲稿,供您参考。更多相关文章,敬请关注本栏目。 【践行核心价值观演讲稿(一)】 尊敬的老师,亲爱的同学们: 大家好。我是来自第四小学五(1)班的钟李敏。今天,我想和大家分享的主题是《弘扬核心价值观,争当苏区好少年》。 还记得每天





