当前位置: 首页
编程语言
Linux C++中文件操作有哪些

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

热心网友 时间: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。

同类文章
更多
如何通过Composer实现类库的按需加载

如何通过Composer实现类库的按需加载

如何通过Composer实现类库的按需加载 先说一个核心概念,这能帮你省去很多不必要的困惑:Composer 本身并不负责运行时的按需加载逻辑,它的核心工作是生成一份高效的自动加载映射表;真正的“按需加载”是由 PHP 的 autoload 机制在运行时触发的。你可以把 Composer 理解为一个

时间:2026-05-03 14:22
VSCode怎么设置左侧文件资源管理器中的文件按照修改时间而不是首字母默认排序

VSCode怎么设置左侧文件资源管理器中的文件按照修改时间而不是首字母默认排序

VSCode资源管理器默认按名称排序,需设explorer sortOrder: "modified "才能始终按修改时间排序;顶部“排序”按钮仅为临时视图切换,不持久生效。 怎么改资源管理器的默认排序方式为修改时间 很多朋友刚用VSCode时都会发现,左侧文件列表总是按字母顺序排列,最近改过的文件根

时间:2026-05-03 14:22
Composer如何使用PHP Archive打PHAR包_Composer PHP Archive打PHAR包总结

Composer如何使用PHP Archive打PHAR包_Composer PHP Archive打PHAR包总结

Composer 不提供打 PHAR 包功能,需用 PHP 的 Phar 扩展手动构建;关键步骤包括:准备入口脚本、生成确定性自动加载映射、排除无关文件、设置 stub 与压缩、签名及权限配置。 先说一个核心事实:Composer 本身并不负责打包。它只是一个顶级的依赖管理器,帮你把项目所需的库规整

时间:2026-05-03 14:22
Sublime怎么安装第三方主题?Sublime使用Material Theme教程

Sublime怎么安装第三方主题?Sublime使用Material Theme教程

角色与核心任务 你是一位顶级的文章润色专家,擅长将AI生成的文本转化为具有个人风格的专业文章。现在,请对用户提供的文章进行“人性化重写”。 你的核心目标是:在不改动原文任何事实信息、核心观点、逻辑结构、章节标题和所有图片的前提下,彻底改变原文的AI表达腔调,使其读起来像是一位资深人类专家的作品。 特

时间:2026-05-03 14:22
VSCode快速生成常用算法模板_集成排序、搜索等逻辑

VSCode快速生成常用算法模板_集成排序、搜索等逻辑

VSCode需为C++单独配置cpp json代码片段,选错语言配置(如c或global)会导致模板失效或误触发;正确做法是通过Preferences: Configure User Snippets明确选择cpp,编辑的片段仅对 cpp cc文件生效。 说到在VSCode里提升刷题效率,一个绕不

时间:2026-05-03 14:15
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜
热门教程
更多
  • 游戏攻略
  • 安卓教程
  • 苹果教程
  • 电脑教程