当前位置:

首页 > 编程开发 > Linux C++中文件操作有哪些

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

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

本文目录

    在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. 写入文件

      • 写入字符串: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);
    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代码交互的场景下不可替代。具体选哪套,就得看你的项目需求和个人的编程风格偏好了。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Linux
    相关文章 更多
    linux删除用户与用户组的方法及命令教程
    linux删除用户与用户组的方法及命令教程

    掌握Linux中删除用户和用户组的正确方法,避免残留文件和进程冲突。本文深入解析userdel和groupdel命令的参数用法,提供处理“用户仍在使用”等常见错误的实战方案。

    Linux如何开启端口号?开放端口命令详解
    Linux如何开启端口号?开放端口命令详解

    详细讲解Linux如何开启端口号以及常用的开放端口命令。

    crossover卸载软件下载及重新安装教程
    crossover卸载软件下载及重新安装教程

    遇到CrossOver运行错误或需要更新版本时,如何彻底卸载旧版并干净重装?本教程详解macOS和Linux下的卸载步骤、残留文件清理方法及官方下载渠道,确保软件环境纯净稳定。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。