C语言文件操作完全指南

2025-05发布7次浏览

C语言中的文件操作是程序设计中非常重要的一个部分,它允许程序员读取、写入和管理存储在磁盘上的数据。本文将详细介绍C语言中的文件操作,包括文件的打开、关闭、读取、写入以及错误处理等关键概念,并通过代码示例帮助读者更好地理解这些技术。

文件的基本概念

在C语言中,文件被视为一系列字节的集合,可以是文本文件或二进制文件。文件操作的核心函数位于标准库<stdio.h>中。主要涉及以下几个方面:

  1. 文件指针:所有文件操作都通过文件指针进行。
  2. 文件模式:指定文件打开的方式(如只读、写入、追加等)。
  3. 文件操作函数:包括打开、关闭、读取、写入等。

文件指针与文件模式

文件指针

文件指针是一个指向FILE结构体的指针,定义如下:

FILE *fp;

通过文件指针可以访问和操作文件。

文件模式

常见的文件模式有以下几种:

  • "r":只读模式,文件必须存在。
  • "w":只写模式,如果文件不存在则创建;如果存在则清空内容。
  • "a":追加模式,如果文件不存在则创建;如果存在则在末尾添加内容。
  • "rb", "wb", "ab":分别对应以二进制方式打开文件进行读取、写入和追加。
  • "r+", "w+", "a+":分别表示可读可写的模式。

文件操作函数

打开文件

使用fopen函数打开文件:

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

示例:

FILE *fp = fopen("example.txt", "r");
if (fp == NULL) {
    perror("Error opening file");
    return -1;
}

关闭文件

使用fclose函数关闭文件:

int fclose(FILE *stream);

示例:

fclose(fp);

读取文件

使用fgetc逐字符读取,或者使用fgets逐行读取:

int fgetc(FILE *stream);
char *fgets(char *str, int n, FILE *stream);

示例:

int ch;
while ((ch = fgetc(fp)) != EOF) {
    putchar(ch);
}

写入文件

使用fputc逐字符写入,或者使用fprintf格式化写入:

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

示例:

fputc('A', fp);
fprintf(fp, "Hello, World!\n");

文件定位

使用fseek设置文件指针的位置,ftell获取当前文件指针位置:

int fseek(FILE *stream, long offset, int whence);
long ftell(FILE *stream);

示例:

fseek(fp, 0, SEEK_END); // 移动到文件末尾
long size = ftell(fp);   // 获取文件大小

错误处理

在文件操作过程中,可能会遇到错误,例如文件无法打开、读写失败等。可以通过检查返回值和使用perror来处理错误:

if (fopen("nonexistent.txt", "r") == NULL) {
    perror("File error");
}

示例程序

以下是一个完整的示例程序,演示如何创建、写入和读取文件:

#include <stdio.h>

int main() {
    FILE *fp = fopen("example.txt", "w+");
    if (fp == NULL) {
        perror("Error opening file");
        return -1;
    }

    // 写入文件
    fprintf(fp, "Hello, World!\n");

    // 返回到文件开头
    fseek(fp, 0, SEEK_SET);

    // 读取文件并打印到屏幕
    char buffer[100];
    while (fgets(buffer, sizeof(buffer), fp) != NULL) {
        printf("%s", buffer);
    }

    fclose(fp);
    return 0;
}

文件操作流程图

以下是文件操作的主要流程图,展示了从打开文件到关闭文件的整个过程:

graph TD
    A[开始] --> B[打开文件]
    B -->|成功| C[执行文件操作]
    B -->|失败| D[输出错误信息]
    C --> E[关闭文件]
    E --> F[结束]