C语言文件操作函数详解:从基础到实战

C语言文件操作函数详解:从基础到实战

一、引言

在C语言编程中,文件操作是必不可少的重要技能。无论是数据持久化、日志记录还是配置文件读取,都需要用到文件操作函数。本文将全面讲解C语言中文件操作的各种函数,帮助大家掌握文件操作的核心技能。

二、文件操作基础

1. 文件指针

在C语言中,我们使用FILE结构体指针来操作文件:

FILE *file_pointer;

2. 文件打开模式

模式 描述
"r" 只读方式打开文本文件
"w" 只写方式创建/清空文本文件
"a" 追加方式打开文本文件
"r+" 读写方式打开文本文件
"w+" 读写方式创建/清空文本文件
"a+" 读写方式追加打开文本文件
"rb" 只读方式打开二进制文件
"wb" 只写方式创建/清空二进制文件

三、文件操作函数详解

1. 文件打开与关闭

1.1 fopen()

FILE *fopen(const char *filename, const char *mode);
  • 功能:打开文件
  • 参数:文件名、打开模式
  • 返回值:成功返回文件指针,失败返回NULL

1.2 fclose()

int fclose(FILE *stream);
  • 功能:关闭文件
  • 返回值:成功返回0,失败返回EOF

2. 字符读写函数

2.1 fgetc()

int fgetc(FILE *stream);
  • 功能:从文件中读取一个字符
  • 返回值:成功返回读取的字符,失败或文件结尾返回EOF

2.2 fputc()

int fputc(int char, FILE *stream);
  • 功能:向文件写入一个字符
  • 返回值:成功返回写入的字符,失败返回EOF

3. 字符串读写函数

3.1 fgets()

char *fgets(char *str, int n, FILE *stream);
  • 功能:从文件中读取字符串
  • 参数:存储缓冲区、最大读取长度、文件指针
  • 返回值:成功返回str指针,失败返回NULL

3.2 fputs()

int fputs(const char *str, FILE *stream);
  • 功能:向文件写入字符串
  • 返回值:成功返回非负整数,失败返回EOF

4. 格式化读写函数

4.1 fprintf()

int fprintf(FILE *stream, const char *format, ...);
  • 功能:格式化输出到文件
  • 示例:
    fprintf(file, "Name: %s, Age: %d\n", name, age);
    

4.2 fscanf()

int fscanf(FILE *stream, const char *format, ...);
  • 功能:从文件格式化输入
  • 示例:
    fscanf(file, "Name: %s, Age: %d", name, &age);
    

5. 二进制文件操作

5.1 fread()

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
  • 功能:从文件读取二进制数据
  • 参数:数据缓冲区、单个元素大小、元素个数、文件指针
  • 返回值:成功读取的元素个数

5.2 fwrite()

size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
  • 功能:向文件写入二进制数据
  • 返回值:成功写入的元素个数

6. 文件定位函数

6.1 fseek()

int fseek(FILE *stream, long offset, int whence);
  • 功能:设置文件位置指针
  • 参数:偏移量、起始位置(SEEK_SET/SEEK_CUR/SEEK_END)

6.2 ftell()

long ftell(FILE *stream);
  • 功能:获取当前文件位置
  • 返回值:当前位置偏移量

6.3 rewind()

void rewind(FILE *stream);
  • 功能:重置文件位置到开头

7. 文件状态检测

7.1 feof()

int feof(FILE *stream);
  • 功能:检测文件结束标志
  • 返回值:非0表示到达文件结尾

7.2 ferror()

int ferror(FILE *stream);
  • 功能:检测文件错误
  • 返回值:非0表示发生错误

四、实战应用示例

1. 文件复制程序

#include <stdio.h>

int main() {
    FILE *src, *dest;
    char buffer[1024];
    size_t bytes;
    
    src = fopen("source.txt", "rb");
    if (!src) {
        perror("Source file error");
        return 1;
    }
    
    dest = fopen("destination.txt", "wb");
    if (!dest) {
        perror("Destination file error");
        fclose(src);
        return 1;
    }
    
    while ((bytes = fread(buffer, 1, sizeof(buffer), src)) {
        fwrite(buffer, 1, bytes, dest);
    }
    
    fclose(src);
    fclose(dest);
    printf("File copied successfully!\n");
    return 0;
}

2. 学生信息管理系统

#include <stdio.h>

typedef struct {
    int id;
    char name[50];
    float score;
} Student;

void save_student(Student *s) {
    FILE *file = fopen("students.dat", "ab");
    if (!file) {
        perror("File open error");
        return;
    }
    fwrite(s, sizeof(Student), 1, file);
    fclose(file);
}

void list_students() {
    FILE *file = fopen("students.dat", "rb");
    if (!file) {
        perror("File open error");
        return;
    }
    
    Student s;
    printf("\nStudent List:\n");
    printf("ID\tName\tScore\n");
    while (fread(&s, sizeof(Student), 1, file)) {
        printf("%d\t%s\t%.2f\n", s.id, s.name, s.score);
    }
    fclose(file);
}

int main() {
    // 添加学生示例
    Student s1 = {1, "Alice", 95.5};
    Student s2 = {2, "Bob", 88.0};
    
    save_student(&s1);
    save_student(&s2);
    
    // 列出学生
    list_students();
    
    return 0;
}

五、最佳实践与注意事项

  1. 文件打开检查:每次打开文件后都要检查是否成功

    if (file == NULL) {
        perror("File opening failed");
        return EXIT_FAILURE;
    }
    
  2. 文件关闭:操作完成后务必关闭文件

    fclose(file);
    
  3. 错误处理:使用ferror()检查文件操作错误

    if (ferror(file)) {
        printf("Error reading file\n");
    }
    
  4. 二进制与文本模式:在Windows系统中注意换行符差异

  5. 缓冲区刷新:及时使用fflush()确保数据写入

    fflush(file);
    
  6. 文件定位:使用fseek()和ftell()获取文件大小

    fseek(file, 0, SEEK_END);
    long size = ftell(file);
    rewind(file);
    

六、总结

C语言提供了丰富的文件操作函数,从基础的字符读写到高级的二进制数据处理,可以满足各种文件操作需求。掌握这些函数的使用方法和注意事项,能够帮助我们开发出更健壮、高效的应用程序。

本文详细讲解了C语言文件操作的各类函数及其使用方法,并提供了实用的代码示例。希望本文能帮助你在C语言文件操作方面有所提高!

posted @ 2025-07-19 13:06  Rare_30  阅读(117)  评论(0)    收藏  举报