授课语音

C 语言文件操作

一、文件操作的概述

  1. 文件的定义

    • 文件是计算机中存储数据的基本单位,可以存储文本、二进制数据等信息。C 语言提供了一系列函数用于创建、读取、写入和关闭文件。
  2. 文件的类型

    • 文本文件:以可读的字符形式存储数据,通常以 .txt.c 等格式结尾。
    • 二进制文件:以二进制格式存储数据,常用于存储图片、音频等非文本数据。
  3. 文件指针

    • C 语言使用 FILE 类型表示文件,所有文件操作都需要通过文件指针来实现。文件指针用于定位文件中的当前位置。

二、文件操作的基本函数

  1. 打开文件

    • 使用 fopen() 函数打开文件,返回一个文件指针。
    • 语法:
      FILE *fopen(const char *filename, const char *mode);
      
    • mode 可以是:
      • "r":以只读方式打开文件。
      • "w":以写入方式打开文件,若文件存在则清空,若不存在则创建。
      • "a":以追加方式打开文件,若文件不存在则创建。
      • "rb""wb""ab":分别用于以二进制方式打开文件。
  2. 关闭文件

    • 使用 fclose() 函数关闭文件,释放资源。
    • 语法:
      int fclose(FILE *stream);
      
  3. 读取文件

    • 使用 fscanf()fgets()fread() 函数从文件中读取数据。
    • 示例:使用 fgets() 读取一行文本:
      char buffer[100];
      fgets(buffer, sizeof(buffer), file);
      
  4. 写入文件

    • 使用 fprintf()fputs()fwrite() 函数向文件写入数据。
    • 示例:使用 fprintf() 写入格式化文本:
      fprintf(file, "Hello, World!\n");
      
  5. 错误处理

    • 在文件操作中,检查返回值非常重要。可以使用 ferror()feof() 函数来判断文件操作是否出错或是否到达文件末尾。

三、文件操作的进阶函数

  1. 定位文件指针

    • 使用 fseek()ftell()rewind() 函数来控制文件指针的位置。
    • 例如,使用 fseek() 定位到文件的特定位置:
      fseek(file, 0, SEEK_SET); // 移动到文件开头
      
  2. 文件复制

    • 利用文件的读取和写入函数,可以实现文件的复制功能。
    • 示例代码:
      void copyFile(const char *source, const char *destination) {
          FILE *src = fopen(source, "rb");
          FILE *dest = fopen(destination, "wb");
          char buffer[1024];
          size_t bytesRead;
      
          while ((bytesRead = fread(buffer, 1, sizeof(buffer), src)) > 0) {
              fwrite(buffer, 1, bytesRead, dest);
          }
      
          fclose(src);
          fclose(dest);
      }
      

四、代码案例

下面是一个完整的示例,展示如何创建一个文本文件,写入内容,读取内容,复制文件,然后关闭文件。

#include <stdio.h>

void copyFile(const char *source, const char *destination);

int main() {
    // 1. 创建并打开文件
    FILE *file = fopen("example.txt", "w"); // 以写入方式打开文件
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1; // 返回错误
    }

    // 2. 写入文件
    fprintf(file, "Hello, World!\n"); // 写入文本
    fprintf(file, "这是一个文件操作示例。\n");
    fclose(file); // 关闭文件

    // 3. 重新打开文件以读取内容
    file = fopen("example.txt", "r"); // 以只读方式打开文件
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1; // 返回错误
    }

    // 4. 读取文件内容并输出
    char buffer[100];
    printf("文件内容:\n");
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("%s", buffer); // 输出每一行
    }

    // 5. 关闭文件
    fclose(file);

    // 6. 复制文件示例
    copyFile("example.txt", "copy_example.txt");
    printf("文件复制完成。\n");

    return 0;
}

// 复制文件的函数实现
void copyFile(const char *source, const char *destination) {
    FILE *src = fopen(source, "rb");
    FILE *dest = fopen(destination, "wb");
    char buffer[1024];
    size_t bytesRead;

    while ((bytesRead = fread(buffer, 1, sizeof(buffer), src)) > 0) {
        fwrite(buffer, 1, bytesRead, dest);
    }

    fclose(src);
    fclose(dest);
}

代码分析:

  • 首先,使用 fopen() 创建并打开一个名为 example.txt 的文件,以写入模式打开。
  • 使用 fprintf() 将字符串写入文件。
  • 然后,关闭文件以保存写入的数据。
  • 接着,重新打开文件以读取内容,使用只读模式。
  • 使用 fgets() 逐行读取文件内容,并通过 printf() 输出。
  • 最后,复制文件 example.txtcopy_example.txt,并关闭所有打开的文件。

五、文件操作的应用场景

  1. 数据持久化

    • 文件操作可以将程序运行时的数据保存到磁盘,便于下次读取。
  2. 日志记录

    • 可以使用文件记录程序运行中的日志信息,方便后续调试和分析。
  3. 配置文件

    • 文件可以用来存储程序的配置数据,便于用户自定义。
  4. 大数据处理

    • 在处理大数据时,常常需要将数据存储到文件中,以避免占用过多内存。

通过以上内容,我们深入了解了 C 语言文件操作的基本知识和常见用法。掌握这些技能,将有助于在编程中更好地处理数据存储和文件管理。

去1:1私密咨询

系列课程: