文件读写是 C 语言中常见的操作,用于将数据存储到文件中或从文件中读取数据。C 语言通过标准库提供的文件操作函数实现这些功能,文件的操作包括打开文件、读写数据、关闭文件等。


📌 目录

  1. 文件操作概述
  2. 文件的打开与关闭
  3. 文件写入操作
  4. 文件读取操作
  5. 文件指针与定位
  6. 文件模式
  7. 错误处理与文件操作
  8. 文件读写的常见示例
  9. 参考资料

1. 文件操作概述

在 C 语言中,文件操作主要通过 stdio.h 头文件提供的函数进行。文件读写操作分为以下几个基本步骤:

  1. 打开文件:使用 fopen() 打开文件。
  2. 读写文件:使用如 fscanf()fprintf()fread()fwrite() 等函数进行文件操作。
  3. 关闭文件:使用 fclose() 关闭文件。

文件操作允许程序持久化存储数据,方便数据的传输和后续处理。


2. 文件的打开与关闭

打开文件:fopen()

fopen() 函数用于打开一个文件,返回一个文件指针。如果打开失败,返回 NULL

语法:

FILE *fopen(const char *filename, const char *mode);

  • filename:要打开的文件名。
  • mode:文件打开模式,决定文件的访问方式。

关闭文件:fclose()

文件操作完成后,应使用 fclose() 关闭文件,以释放资源。

语法:

int fclose(FILE *stream);

  • stream:文件指针,指向打开的文件。

示例:打开并关闭文件

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");  // 以写模式打开文件
    if (file == NULL) {
        printf("Error opening file!\n");
        return 1;
    }

    fprintf(file, "Hello, World!\n");  // 写入数据到文件
    fclose(file);  // 关闭文件

    printf("File written and closed successfully.\n");
    return 0;
}

输出:

File written and closed successfully.


3. 文件写入操作

C 语言提供了多种方式来向文件中写入数据,最常见的方式是使用 fprintf()fwrite()

fprintf()

fprintf() 用于将格式化的数据写入文件,类似于 printf

语法:

int fprintf(FILE *stream, const char *format, ...);

fwrite()

fwrite() 用于将二进制数据写入文件。

语法:

size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);

  • ptr:指向要写入的数据的指针。
  • size:每个元素的大小(字节数)。
  • count:要写入的元素个数。
  • stream:文件指针。

示例:写入文本与二进制数据

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");

    if (file == NULL) {
        printf("Error opening file!\n");
        return 1;
    }

    // 写入文本数据
    fprintf(file, "This is a sample text.\n");

    // 写入二进制数据
    int arr[] = {1, 2, 3, 4, 5};
    fwrite(arr, sizeof(int), 5, file);

    fclose(file);
    printf("Data written to file.\n");
    return 0;
}

输出:

Data written to file.


4. 文件读取操作

C 语言通过 fscanf()fread() 函数读取文件内容。

fscanf()

fscanf() 用于从文件中读取格式化的数据,类似于 scanf

语法:

int fscanf(FILE *stream, const char *format, ...);

fread()

fread() 用于读取二进制数据。

语法:

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);

  • ptr:指向存储读取数据的缓冲区。
  • size:每个元素的大小(字节数)。
  • count:要读取的元素个数。
  • stream:文件指针。

示例:读取文本与二进制数据

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");

    if (file == NULL) {
        printf("Error opening file!\n");
        return 1;
    }

    // 读取文本数据
    char text[100];
    fscanf(file, "%s", text);
    printf("Read text: %s\n", text);

    // 读取二进制数据
    int arr[5];
    fread(arr, sizeof(int), 5, file);

    printf("Read binary data: ");
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    fclose(file);
    return 0;
}

输出:

Read text: This
Read binary data: 1 2 3 4 5


5. 文件指针与定位

文件指针用于指示当前文件的位置。C 语言提供了几个函数来控制文件指针的位置:

  • fseek():设置文件指针到指定位置。
  • ftell():返回文件指针的当前位置。
  • rewind():将文件指针移动到文件的开始位置。

示例:文件指针操作

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");

    if (file == NULL) {
        printf("Error opening file!\n");
        return 1;
    }

    // 移动文件指针到文件的第5个字节
    fseek(file, 5, SEEK_SET);

    // 获取文件指针位置
    long position = ftell(file);
    printf("Current file pointer position: %ld\n", position);

    fclose(file);
    return 0;
}

输出:

Current file pointer position: 5


6. 文件模式

在打开文件时,fopen() 需要指定文件的打开模式,常见的模式包括:

  • "r":以只读方式打开文件。
  • "w":以只写方式打开文件。如果文件不存在,则创建文件;如果文件已存在,清空文件内容。
  • "a":以追加方式打开文件。如果文件不存在,则创建文件;如果文件已存在,内容会追加到文件末尾。
  • "rb""wb""ab":二进制模式下的文件打开方式。

7. 错误处理与文件操作

C 语言提供了几个函数用于处理文件操作中的错误:

  • ferror():检查文件流是否发生错误。
  • perror():打印与错误相关的描述信息。

示例:错误处理

#include <stdio.h>

int main() {
    FILE *file = fopen("nonexistent.txt", "r");

    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }

    fclose(file);
    return 0;
}

输出:

Error opening file: No such file or directory


8. 文件读写的常见示例

示例:写入并读取文本文件

#include <stdio.h>

int main() {
    FILE *file = fopen("data.txt", "w");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    fprintf(file, "This is a simple file operation example.\n");
    fclose(file);

    file = fopen("data.txt", "r");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    char buffer[100];
    fgets(buffer, 100, file);
   

printf(“Read from file: %s\n”, buffer);

fclose(file);
return 0;

}


**输出:**

Read from file: This is a simple file operation example.


---

## **9. 参考资料**

- [C 文件 I/O 操作 - 菜鸟教程](https://www.runoob.com/cprogramming/c-file-io.html)
- [C 语言文件操作 - GeeksforGeeks](https://www.geeksforgeeks.org/file-handling-c-classes/)
- [C 语言文件操作 - Wikipedia](https://en.wikipedia.org/wiki/C_standard_library#File_operations)

---

## **📌 总结**

C 语言通过 `fopen`、`fclose`、`fprintf`、`fscanf`、`fwrite`、`fread` 等函数实现了对文件的读写操作。程序可以使用这些函数进行文本文件和二进制文件的处理。理解文件模式、文件指针及其定位、以及错误处理是进行文件操作时的重要基础。