第2课C_文件操作
热度🔥:19 免费课程
授课语音
C 语言文件操作
一、文件操作的概述
文件的定义
- 文件是计算机中存储数据的基本单位,可以存储文本、二进制数据等信息。C 语言提供了一系列函数用于创建、读取、写入和关闭文件。
文件的类型
- 文本文件:以可读的字符形式存储数据,通常以
.txt
、.c
等格式结尾。 - 二进制文件:以二进制格式存储数据,常用于存储图片、音频等非文本数据。
- 文本文件:以可读的字符形式存储数据,通常以
文件指针
- C 语言使用
FILE
类型表示文件,所有文件操作都需要通过文件指针来实现。文件指针用于定位文件中的当前位置。
- C 语言使用
二、文件操作的基本函数
打开文件
- 使用
fopen()
函数打开文件,返回一个文件指针。 - 语法:
FILE *fopen(const char *filename, const char *mode);
mode
可以是:"r"
:以只读方式打开文件。"w"
:以写入方式打开文件,若文件存在则清空,若不存在则创建。"a"
:以追加方式打开文件,若文件不存在则创建。"rb"
、"wb"
、"ab"
:分别用于以二进制方式打开文件。
- 使用
关闭文件
- 使用
fclose()
函数关闭文件,释放资源。 - 语法:
int fclose(FILE *stream);
- 使用
读取文件
- 使用
fscanf()
、fgets()
或fread()
函数从文件中读取数据。 - 示例:使用
fgets()
读取一行文本:char buffer[100]; fgets(buffer, sizeof(buffer), file);
- 使用
写入文件
- 使用
fprintf()
、fputs()
或fwrite()
函数向文件写入数据。 - 示例:使用
fprintf()
写入格式化文本:fprintf(file, "Hello, World!\n");
- 使用
错误处理
- 在文件操作中,检查返回值非常重要。可以使用
ferror()
和feof()
函数来判断文件操作是否出错或是否到达文件末尾。
- 在文件操作中,检查返回值非常重要。可以使用
三、文件操作的进阶函数
定位文件指针
- 使用
fseek()
、ftell()
和rewind()
函数来控制文件指针的位置。 - 例如,使用
fseek()
定位到文件的特定位置:fseek(file, 0, SEEK_SET); // 移动到文件开头
- 使用
文件复制
- 利用文件的读取和写入函数,可以实现文件的复制功能。
- 示例代码:
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.txt
到copy_example.txt
,并关闭所有打开的文件。
五、文件操作的应用场景
数据持久化
- 文件操作可以将程序运行时的数据保存到磁盘,便于下次读取。
日志记录
- 可以使用文件记录程序运行中的日志信息,方便后续调试和分析。
配置文件
- 文件可以用来存储程序的配置数据,便于用户自定义。
大数据处理
- 在处理大数据时,常常需要将数据存储到文件中,以避免占用过多内存。
通过以上内容,我们深入了解了 C 语言文件操作的基本知识和常见用法。掌握这些技能,将有助于在编程中更好地处理数据存储和文件管理。