如何进行文件操作

发布于:2025-03-25 ⋅ 阅读:(35) ⋅ 点赞:(0)

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


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

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

  • 特点:

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

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

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

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

  • 特点:

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

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

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

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

  • 特点:

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

    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 调整文件指针的位置。
  • 示例:

    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 调整文件指针的位置。
  • 示例:

    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)

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

  • 特点:

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

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