首页 游戏 软件 资讯 排行榜 专题
首页
编程语言
Linux C++中文件操作有哪些

Linux C++中文件操作有哪些

热心网友
85
转载
2026-05-03

在Linux环境下玩转C++文件操作

说到在Linux环境下用C++处理文件,开发者手里通常有两把“钥匙”:一把是C++标准库自带的,另一把则是经典的C语言标准I/O库。这两套工具各有各的脾气,用对了地方,文件读写就能变得行云流水。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

Linux C++中文件操作有哪些

下面咱们就来详细拆解一下这两套方法的核心操作,看看它们具体怎么用。

C++标准库 :面向对象的优雅之选

如果你偏爱C++的面向对象风格,那么会是你的菜。它把文件封装成了流对象,用起来直观又省心。

  1. 文件打开

    开门第一件事,自然是打开文件。提供了三种流类:

    std::ifstream infile("example.txt"); // 专用于读取的文件输入流
    std::ofstream outfile("example.txt"); // 专用于写入的文件输出流
    std::fstream file("example.txt", std::ios::in | std::ios::out); // 既能读又能写的文件流
  2. 检查文件是否成功打开

    文件路径不对、权限不足?打开操作可能失败。所以,养成好习惯,先检查一下:

    if (!infile.is_open()) {
        std::cerr << "Unable to open file for reading!" << std::endl;
    }
  3. 读取文件

    文件打开了,怎么读数据?这里有几种常见姿势:

    • 逐字符读取:适合精细处理每个字符的场景。
      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中的数据
      }
  4. 写入文件

    说完了读,再来看看怎么写。写入同样灵活多样:

    • 写入字符串:像用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));
  5. 关闭文件

    好习惯是成功的一半。用完文件,记得显式关闭流,释放资源:

    infile.close();
    outfile.close();
    file.close();
  6. 文件指针操作

    想在文件里“跳转”吗?通过操作文件指针,你可以轻松定位到任意位置:

    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++中常写作)依然是利器。它的函数式接口非常直接。

  1. 文件打开

    通过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+"); // 读写模式打开
  2. 检查文件是否成功打开

    fopen失败会返回NULL

    if (file == NULL) {
        perror("Unable to open file");
        return 1;
    }
  3. 读取文件

    • 逐字符读取:使用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中的数据
      }
  4. 写入文件

    • 写入字符串fprintfprintf用法类似,非常直观。
      fprintf(file, "Hello, World!\n");
    • 写入字符数组:同样可以用fprintf
      const char* data = "Some data";
      fprintf(file, "%s", data);
    • 写入固定大小的数据块fwritefread的孪生兄弟,用于二进制写入。
      char buffer[1024] = "Some data";
      fwrite(buffer, 1, sizeof(buffer), file);
  5. 关闭文件

    和C++一样,用完记得fclose

    fclose(file);
  6. 文件指针操作

    在C接口中,使用fseek函数来移动文件指针:

    fseek(file, 0, SEEK_SET); // 移动到文件开头
    fseek(file, 10, SEEK_CUR); // 从当前位置向后移动10个字节
    fseek(file, -10, SEEK_END); // 从文件末尾向前移动10个字节

简单总结一下:C++的提供了更现代、更面向对象的封装,与C++的其他部分(如字符串)集成得更好,写起来往往更简洁。而C的则更为底层和灵活,在某些追求极致性能或需要与大量C代码交互的场景下不可替代。具体选哪套,就得看你的项目需求和个人的编程风格偏好了。

来源:https://www.yisu.com/ask/28614481.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

Filebeat如何实现跨平台日志收集
编程语言
Filebeat如何实现跨平台日志收集

Filebeat跨平台日志收集实践指南 一 架构与关键点 面对混合IT环境,如何用一套工具搞定所有主机的日志收集?Filebeat给出了答案。它提供了覆盖Linux、Windows和macOS的安装包,这意味着,你只需要维护同一套简洁的YAML配置,就能在不同操作系统上实现统一的日志采集与输出。其轻

热心网友
05.03
Filebeat如何进行日志压缩与归档
编程语言
Filebeat如何进行日志压缩与归档

Filebeat日志压缩与归档实践 说到日志管理,很多朋友会问:Filebeat本身能搞定日志的本地压缩和长期归档吗?答案是,这事儿得分两头看。Filebeat的核心任务是采集和转发,它并不包办所有存储和归档的活儿。一个典型的实践方案是:本地用系统工具处理Filebeat自己的日志,防止磁盘爆满;远

热心网友
05.03
如何利用Filebeat进行故障排查
编程语言
如何利用Filebeat进行故障排查

Filebeat故障排查实操手册 日志采集管道卡住了?数据流突然中断?别慌,这往往是Filebeat在“报警”。作为数据管道的第一公里,它的稳定至关重要。下面这份实操指南,能帮你像老手一样,快速定位并解决大多数常见问题。 一、快速定位流程 遇到问题,按这个顺序走一遍,十有八九能找到症结所在。 确认服

热心网友
05.03
如何自定义Filebeat日志格式
编程语言
如何自定义Filebeat日志格式

Filebeat日志格式自定义指南 一 概念澄清 在动手配置之前,先得把两个容易混淆的概念理清楚: Filebeat自身运行日志:这指的是Filebeat这个“搬运工”自己工作时产生的日志,比如它有没有正常启动、遇到了什么错误。这类日志通常输出到磁盘文件或控制台,方便运维人员排错。你可以选择让它以纯

热心网友
05.03
HDFS快照如何使用
编程语言
HDFS快照如何使用

HDFS 快照使用指南 说到数据备份与恢复,HDFS快照绝对是一个高效且轻量的利器。它本质上就是文件系统在某个特定时刻的“只读照片”,专门用于应对误操作或进行历史状态对比。那么,它到底是怎么工作的?简单来说,有以下几个核心特性: 一 核心概念与适用场景 首先,HDFS快照的创建几乎是瞬间完成的,时间

热心网友
05.03

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

元旦节一日游
职业与学业
元旦节一日游

元旦一日游:在科技与自然的交汇处漫步 新年的钟声犹在耳畔,2026年的第一个假日便已翩然而至。空气中弥漫着喜庆与松弛的气息,我也决定暂别日常的节奏,加入这人潮涌动的假日行列,来一场计划之外的短途游览。 中午时分,目的地准时抵达。眼前是人头攒动的热闹景象,那份跃跃欲试的心情几乎要破笼而出。不过,一切还

热心网友
05.03
今天元旦
职业与学业
今天元旦

今天元旦 元旦这天,大概是孩子们最快乐的时刻了。你听,大清早的鞭炮声就此起彼伏,宣告着新年的到来。一句“新年快乐”,是这一天最自然而然的开场白。 说到新年,怎么能少得了饺子呢?这几乎是家家户户的保留节目。一家人早早地忙活起来:爸爸负责擀皮,妈妈和我负责包。分工明确,配合默契,不一会儿,一排排白胖胖的

热心网友
05.03
欢庆元旦
职业与学业
欢庆元旦

又是一个阳光明媚、万&里无云的好天气 处处弥漫着一股喜气洋洋的气氛,偶尔会有一丝丝凉风拂过脸上抑制不住的笑容。你知道吗?全校师生正齐聚一堂,准备欢庆元旦呢! 活动伊始,场内还有些许嘈杂的声响,但随着几位英姿飒爽的主持人登场,现场顷刻间鸦雀无声,所有人的目光都聚焦在舞台上,专心致志地等待节目开始。 精

热心网友
05.03
元旦运动会
职业与学业
元旦运动会

光阴似箭,一转眼2026就要和我们说再见了 在年末的最后一天,我们学校举办了一场气氛热烈的运动会,为这一年画上了一个充满活力的句号。 比赛开始了 各项赛事紧锣密鼓地展开,同学们个个摩拳擦掌,做好了充分的赛前准备。首先登场的是我个人最喜欢也最拿手的项目——跳绳。裁判员的口哨声清脆响起,我手中的绳子便立

热心网友
05.03
弘扬核心价值观演讲稿
职业与学业
弘扬核心价值观演讲稿

践行核心价值观演讲稿 本站为您整理了一系列关于践行社会主义核心价值观的演讲稿,供您参考。更多相关文章,敬请关注本栏目。 【践行核心价值观演讲稿(一)】 尊敬的老师,亲爱的同学们: 大家好。我是来自第四小学五(1)班的钟李敏。今天,我想和大家分享的主题是《弘扬核心价值观,争当苏区好少年》。 还记得每天

热心网友
05.03