文件概述
在C语言中,文件被视为一个字节序列的抽象,可以存储文本、二进制数据或混合数据。文件操作是通过标准库提供的文件处理函数来完成的,这些函数主要集中在stdio.h
头文件中。
文件类型
文本文件:包含可读字符序列,操作系统通常会在内部转换为特定的字符编码(如ASCII、UTF-8)。在C语言中,通过标准输入输出流(如stdin、stdout)或以文本模式打开的文件流处理此类文件。
二进制文件:包含原始字节序列,不做任何字符编码转换。处理二进制文件时,通常使用以二进制模式打开的文件流。
文件操作流程
打开文件:
使用fopen
函数打开一个文件,返回一个指向FILE
结构体的指针(称为文件指针),用于后续文件操作。示例:
FILE *fp;
fp = fopen("example.txt", "r"); // 打开名为example.txt的文件以只读方式("r")打开
打开模式还包括:"w"
(写入,如果文件已存在则清空内容)、"a"
(追加,如果文件不存在则创建)、"r+"
(读写,文件必须存在)、"w+"
(读写,如果文件已存在则清空内容)、"a+"
(读写,如果文件不存在则创建)。
读写文件:
根据文件指针进行文件内容的读取或写入。常用函数包括:
读取:
fscanf
:从文件中按格式读取数据,类似于scanf
。fgets
:读取一行文本,包括换行符。fread
:读取二进制数据块。
写入:
fprintf
:向文件中按格式写入数据,类似于printf
。fputs
:写入一行文本,不包括换行符。fwrite
:写入二进制数据块。
示例:
char buffer[100];
fgets(buffer, sizeof(buffer), fp); // 从fp指向的文件中读取一行文本
fprintf(fp, "%s\n", "Hello, World!"); // 向fp指向的文件中写入一行文本
定位文件指针:
使用fseek
函数改变文件指针的位置,以便在文件的不同位置进行读写。fseek
接受三个参数:文件指针、偏移量和起始点(SEEK_SET
、SEEK_CUR
、SEEK_END
分别代表文件开头、当前位置、文件结尾)。示例:
fseek(fp, 100, SEEK_SET); // 将文件指针移动到距文件开头100字节的位置
检查文件状态:使用
feof
、ferror
和ftell
函数检查文件状态:feof(fp):检查是否已到达文件末尾。
ferror(fp):检查是否存在读写错误。
ftell(fp):返回当前文件指针的位置(相对于文件开头的字节数)。
关闭文件:使用
fclose
函数关闭已打开的文件,释放相关资源。示例:
fclose(fp); // 关闭fp指向的文件
示例代码
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp;
// 打开文件
fp = fopen("example.txt", "w+");
if (fp == NULL) {
perror("Failed to open file");
return EXIT_FAILURE;
}
// 写入数据
fprintf(fp, "Hello, World!\n");
// 重新定位文件指针
fseek(fp, 0, SEEK_SET);
// 读取数据
char buffer[100];
if (fgets(buffer, sizeof(buffer), fp)) {
printf("Read from file: %s", buffer);
}
// 关闭文件
if (fclose(fp) != 0) {
perror("Failed to close file");
return EXIT_FAILURE;
}
return 0;
}
评论区