跳转到内容

C 语言文件基础

来自代码酷

C语言文件基础[编辑 | 编辑源代码]

在C语言中,文件操作是程序与外部存储设备(如硬盘、U盘等)进行数据交互的重要手段。通过文件操作,程序可以读取、写入和修改存储在文件中的数据。本章将详细介绍C语言中的文件基础概念、操作流程以及相关函数。

文件的基本概念[编辑 | 编辑源代码]

文件是存储在外部存储设备上的数据集合,可以是文本文件或二进制文件。在C语言中,文件操作通常包括以下步骤: 1. 打开文件:使用`fopen()`函数打开文件,并返回一个文件指针。 2. 读写文件:使用`fread()`、`fwrite()`、`fscanf()`、`fprintf()`等函数进行数据读写。 3. 关闭文件:使用`fclose()`函数关闭文件,释放资源。

文件指针[编辑 | 编辑源代码]

文件指针(`FILE *`)是C语言中用于操作文件的关键数据结构。它指向一个文件流,通过它可以对文件进行读写操作。例如:

FILE *fp;  // 声明一个文件指针

文件的打开与关闭[编辑 | 编辑源代码]

打开文件[编辑 | 编辑源代码]

`fopen()`函数用于打开文件,其语法为:

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

其中:

  • `filename`:文件名(包括路径)。
  • `mode`:打开模式,如`"r"`(只读)、`"w"`(只写)、`"a"`(追加)等。

示例:

FILE *fp = fopen("example.txt", "r");  // 以只读方式打开文件
if (fp == NULL) {
    printf("文件打开失败!\n");
    return 1;
}

关闭文件[编辑 | 编辑源代码]

`fclose()`函数用于关闭文件,其语法为:

int fclose(FILE *fp);

示例:

fclose(fp);  // 关闭文件

文件的读写操作[编辑 | 编辑源代码]

文本文件的读写[编辑 | 编辑源代码]

文本文件以字符形式存储数据,常用的读写函数包括:

  • `fprintf()`:格式化写入文件。
  • `fscanf()`:格式化读取文件。

示例:写入数据到文件

FILE *fp = fopen("output.txt", "w");
if (fp == NULL) {
    printf("文件打开失败!\n");
    return 1;
}
fprintf(fp, "Hello, World!\n");  // 写入字符串
fclose(fp);

示例:从文件读取数据

FILE *fp = fopen("input.txt", "r");
if (fp == NULL) {
    printf("文件打开失败!\n");
    return 1;
}
char buffer[100];
fscanf(fp, "%s", buffer);  // 读取字符串
printf("读取的内容:%s\n", buffer);
fclose(fp);

二进制文件的读写[编辑 | 编辑源代码]

二进制文件以字节形式存储数据,常用的读写函数包括:

  • `fwrite()`:写入二进制数据。
  • `fread()`:读取二进制数据。

示例:写入二进制数据

int data[] = {1, 2, 3, 4, 5};
FILE *fp = fopen("data.bin", "wb");
if (fp == NULL) {
    printf("文件打开失败!\n");
    return 1;
}
fwrite(data, sizeof(int), 5, fp);  // 写入5个整数
fclose(fp);

示例:读取二进制数据

int data[5];
FILE *fp = fopen("data.bin", "rb");
if (fp == NULL) {
    printf("文件打开失败!\n");
    return 1;
}
fread(data, sizeof(int), 5, fp);  // 读取5个整数
for (int i = 0; i < 5; i++) {
    printf("%d ", data[i]);
}
fclose(fp);

文件操作的实际应用[编辑 | 编辑源代码]

案例1:日志记录[编辑 | 编辑源代码]

文件操作常用于记录程序运行日志。例如:

FILE *log = fopen("app.log", "a");
if (log == NULL) {
    printf("日志文件打开失败!\n");
    return 1;
}
fprintf(log, "[INFO] 程序启动于 %s\n", __TIME__);
fclose(log);

案例2:配置文件读取[编辑 | 编辑源代码]

程序可以通过文件操作读取配置文件。例如:

FILE *config = fopen("config.ini", "r");
if (config == NULL) {
    printf("配置文件打开失败!\n");
    return 1;
}
char key[50], value[50];
while (fscanf(config, "%s = %s", key, value) != EOF) {
    printf("配置项:%s = %s\n", key, value);
}
fclose(config);

文件操作的常见错误与处理[编辑 | 编辑源代码]

错误处理[编辑 | 编辑源代码]

文件操作可能因权限不足、文件不存在等原因失败。可以通过检查返回值或使用`perror()`函数输出错误信息:

FILE *fp = fopen("nonexistent.txt", "r");
if (fp == NULL) {
    perror("文件打开失败");  // 输出错误信息
    return 1;
}

文件指针的有效性[编辑 | 编辑源代码]

操作文件前应检查文件指针是否为`NULL`,以避免程序崩溃。

总结[编辑 | 编辑源代码]

C语言文件操作是程序与外部存储设备交互的重要方式。通过`fopen()`、`fclose()`、`fread()`、`fwrite()`等函数,可以实现文件的读写和管理。掌握文件操作是C语言编程的基础技能之一。

练习[编辑 | 编辑源代码]

1. 编写一个程序,将用户输入的内容保存到文件中。 2. 编写一个程序,读取文件内容并统计行数。