C语言学习:如何使用C语言常见的文件操作函数

C语言学习:如何使用C语言常见的文件操作函数
最新回答
忘了就别再想起づ

2026-08-04 04:36:03

C语言提供了丰富的文件操作函数,用于实现文件的打开、关闭、读写等操作。以下是常见文件操作函数的详细说明及示例:

一、文件的打开和关闭1. 文件指针
  • FILE结构体:每个打开的文件在内存中对应一个FILE结构体变量,存储文件名、状态、位置等信息。
  • 文件指针:通过FILE*指针维护该结构体,方便操作文件。
2. 文件打开和关闭
  • fopen:打开文件,返回文件指针。

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

    mode:打开方式(如"r"只读、"w"只写、"a"追加、"r+"读写等)。

    示例:

    FILE *fp = fopen("test.txt", "w"); // 以只写方式打开文件if (fp == NULL) { printf("文件打开失败n"); return -1;}
  • fclose:关闭文件,释放资源。

    int fclose(FILE *stream);

    示例:

    fclose(fp); // 关闭文件
二、文件的顺序读写1. 字符读写:fgetc() 和 fputc()
  • fgetc:读取一个字符,到达文件末尾或失败时返回EOF。int ch = fgetc(fp);
  • fputc:写入一个字符,返回写入的字符,失败时返回EOF。fputc('A', fp); // 写入字符'A'
2. 字符串读写:fgets() 和 fputs()
  • fgets:读取一行字符串(最多n-1个字符,遇到n停止)。char buf[100];fgets(buf, sizeof(buf), fp); // 读取一行到buf
  • fputs:写入字符串(不自动添加n)。fputs("Hellon", fp); // 写入字符串
3. 格式化读写:fscanf() 和 fprintf()
  • fscanf:从文件格式化读取数据。int num;fscanf(fp, "%d", &num); // 读取整数
  • fprintf:格式化写入数据。fprintf(fp, "%d %s", 10, "abc"); // 写入格式化数据
4. 二进制读写:fread() 和 fwrite()
  • fread:读取二进制数据。size_t fread(void *buf, size_t size, size_t count, FILE *fp);

    示例:

    int arr[5];fread(arr, sizeof(int), 5, fp); // 读取5个整数
  • fwrite:写入二进制数据。size_t fwrite(const void *buf, size_t size, size_t count, FILE *fp);

    示例:

    int arr[3] = {1, 2, 3};fwrite(arr, sizeof(int), 3, fp); // 写入3个整数
三、文件的随机读写1. fseek():移动文件指针int fseek(FILE *fp, long offset, int whence);
  • whence:

    SEEK_SET(0):文件开头。

    SEEK_CUR(1):当前位置。

    SEEK_END(2):文件末尾。

  • 示例:fseek(fp, 10, SEEK_SET); // 指针移动到距开头10字节处
2. ftell():获取指针位置long ftell(FILE *fp);
  • 返回值:当前指针位置(字节偏移量)。
3. rewind():重置指针到文件开头void rewind(FILE *fp);四、文本文件与二进制文件
  • 文本文件:以ASCII字符存储(如.txt),可读性强。
  • 二进制文件:直接存储内存数据(如.dat),效率高但不可读。
五、文件读取结束的判定1. feof():检测文件末尾int feof(FILE *fp);
  • 返回值:到达末尾返回非零值,否则返回0。
2. ferror():检测文件错误int ferror(FILE *fp);
  • 返回值:出错返回非零值,否则返回0。
3. 判断方式
  • 文本文件:

    fgetc:检查是否为EOF。

    fgets:检查返回值是否为NULL。

  • 二进制文件:

    fread:检查返回值是否小于请求的项数。

六、文件缓冲区
  • 作用:数据先写入内存缓冲区,满后再写入磁盘,提高效率。
  • 刷新缓冲区:

    fflush:强制刷新缓冲区。

    int fflush(FILE *fp);

    fclose:关闭文件时自动刷新。

示例代码#include <stdio.h>int main() { // 1. 打开文件 FILE *fp = fopen("example.txt", "w+"); if (fp == NULL) { perror("文件打开失败"); return 1; } // 2. 写入数据 fprintf(fp, "Hello, World!n"); fputs("This is a test.n", fp); // 3. 读取数据 rewind(fp); // 重置指针到开头 char buf[100]; while (fgets(buf, sizeof(buf), fp) != NULL) { printf("%s", buf); } // 4. 关闭文件 fclose(fp); return 0;}总结
  • 打开/关闭:fopen、fclose。
  • 顺序读写:字符(fgetc/fputc)、字符串(fgets/fputs)、格式化(fscanf/fprintf)、二进制(fread/fwrite)。
  • 随机读写:fseek、ftell、rewind。
  • 结束判定:feof、ferror。
  • 缓冲区:fflush刷新。

掌握这些函数后,可以高效地操作文件数据。