如何进行文件操作

在 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+" | 追加读写模式,文件存在则追加,不存在则创建。 |

相关推荐
IT_陈寒7 分钟前
SpringBoot实战:这5个隐藏技巧让我开发效率提升200%,90%的人都不知道!
前端·人工智能·后端
西岭千秋雪_13 分钟前
Spring AI alibaba Prompt模板&Advisor自定义
java·人工智能·spring·prompt
ObjectX前端实验室19 分钟前
【图形编辑器架构】节点树与渲染树的双向绑定原理
前端·计算机图形学·图形学
今后12320 分钟前
【数据结构】堆、计数、桶、基数排序的实现
数据结构·算法·堆排序·计数排序·桶排序·基数排序
敲代码的嘎仔21 分钟前
牛客算法基础noob59 简写单词
java·开发语言·数据结构·程序人生·算法·leetcode·学习方法
少许极端22 分钟前
算法奇妙屋(四)-归并分治
java·算法·排序算法·分治·归并
fly spider23 分钟前
3.数组算法
算法
excel32 分钟前
Vue2 与 Vue3 生命周期详解与对比
前端
一只猪皮怪51 小时前
React 18 前端最佳实践技术栈清单(2025版)
前端·react.js·前端框架
Misnice1 小时前
React渲染超大的字符串
前端·javascript·react.js