如何进行文件操作

在 C 语言中,文件操作是通过标准库函数(如 fopenfclosefprintf 等)来完成的。fopen 函数用于打开文件,它的第二个参数是一个字符串,指定了文件的打开模式。常见的模式包括 "w""a""r" 等,每种模式有不同的用途和行为。


1. "r":只读模式(Read)

  • 作用: 打开文件用于读取。

  • 特点:

    • 文件必须存在,否则 fopen 会返回 NULL
    • 不能写入文件。
  • 示例:

    cpp 复制代码
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("文件打开失败!\\\\n");
        return 1;
    }

2. "w":只写模式(Write)

  • 作用: 打开文件用于写入。

  • 特点:

    • 如果文件存在,内容会被清空(覆盖)。
    • 如果文件不存在,会创建一个新文件。
    • 不能读取文件。
  • 示例:

    cpp 复制代码
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("文件打开失败!\\\\n");
        return 1;
    }
    fprintf(file, "Hello, World!\\\\n");
    fclose(file);

3. "a":追加模式(Append)

  • 作用: 打开文件用于追加写入。

  • 特点:

    • 如果文件存在,写入的数据会追加到文件末尾。
    • 如果文件不存在,会创建一个新文件。
    • 不能读取文件。
  • 示例:

    cpp 复制代码
    FILE *file = fopen("example.txt", "a");
    if (file == NULL) {
        printf("文件打开失败!\\\\n");
        return 1;
    }
    fprintf(file, "This is appended text.\\\\n");
    fclose(file);

4. "r+":读写模式(Read and Write)

  • 作用: 打开文件用于读取和写入。

  • 特点:

    • 文件必须存在,否则 fopen 会返回 NULL
    • 写入数据时会从文件开头覆盖原有内容。
    • 可以通过 fseek 调整文件指针的位置。
  • 示例:

    cpp 复制代码
    FILE *file = fopen("example.txt", "r+");
    if (file == NULL) {
        printf("文件打开失败!\\\\n");
        return 1;
    }
    fseek(file, 0, SEEK_END); // 将文件指针移动到末尾
    fprintf(file, "This is added text.\\\\n");
    fclose(file);

5. "w+":读写模式(Write and Read)

  • 作用: 打开文件用于读取和写入。

  • 特点:

    • 如果文件存在,内容会被清空(覆盖)。
    • 如果文件不存在,会创建一个新文件。
    • 可以通过 fseek 调整文件指针的位置。
  • 示例:

    cpp 复制代码
    FILE *file = fopen("example.txt", "w+");
    if (file == NULL) {
        printf("文件打开失败!\\\\n");
        return 1;
    }
    fprintf(file, "This is new content.\\\\n");
    fseek(file, 0, SEEK_SET); // 将文件指针移动到开头
    char buffer[100];
    fgets(buffer, 100, file); // 读取文件内容
    printf("File content: %s", buffer);
    fclose(file);

6. "a+":追加读写模式(Append and Read)

  • 作用: 打开文件用于追加写入和读取。

  • 特点:

    • 如果文件存在,写入的数据会追加到文件末尾。
    • 如果文件不存在,会创建一个新文件。
    • 读取操作可以从文件开头开始,但写入操作只能在文件末尾进行。
  • 示例:

    cpp 复制代码
    FILE *file = fopen("example.txt", "a+");
    if (file == NULL) {
        printf("文件打开失败!\\\\n");
        return 1;
    }
    fprintf(file, "This is appended text.\\\\n");
    fseek(file, 0, SEEK_SET); // 将文件指针移动到开头
    char buffer[100];
    fgets(buffer, 100, file); // 读取文件内容
    printf("File content: %s", buffer);
    fclose(file);

7. 二进制模式

在模式字符串中添加 "b" 可以以二进制模式打开文件(例如 "rb""wb""ab" 等)。二进制模式与文本模式的区别在于:

  • 文本模式:会对换行符进行特殊处理(例如 Windows 中将 \n 转换为 \r\n)。
  • 二进制模式:直接读写原始数据,不做任何转换。

8. 总结

|--------|------------------------|
| 模式 | 描述 |
| "r" | 只读模式,文件必须存在。 |
| "w" | 只写模式,文件存在则清空,不存在则创建。 |
| "a" | 追加模式,文件存在则追加,不存在则创建。 |
| "r+" | 读写模式,文件必须存在。 |
| "w+" | 读写模式,文件存在则清空,不存在则创建。 |
| "a+" | 追加读写模式,文件存在则追加,不存在则创建。 |

相关推荐
瑞雪兆丰年兮6 分钟前
数学实验(Matlab语言环境和线性代数实验)
算法·数学建模·matlab·数学实验
半青年30 分钟前
基于Qt开发的http/https客户端
java·c++·qt·网络协议·http·https·信息与通信
冠位巴萨辛山の翁43 分钟前
Maven
java·maven
小猫猫改bug44 分钟前
threejs 添加css3d标签 vue3
前端·javascript·css3
前端小巷子1 小时前
CSS3 过渡与动画
前端·css·css3
m0_zj1 小时前
58.[前端开发-前端工程化]Day05-webpack-Git安装-配置-Git命令
前端·webpack·node.js
烨然若神人~1 小时前
算法训练营第十一天|150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素
算法
GanGuaGua1 小时前
CSS:字体和文本样式
前端·css
Ten peaches1 小时前
苍穹外卖(用户下单、订单支付)
java·开发语言·spring boot
天天爱吃肉82181 小时前
机器学习经典算法:用决策树原理优化新能源汽车续航能力
算法·决策树·机器学习