1.什么是文件
文件(File)是计算机系统中的基本概念,它用于存储数据、信息和程序代码。文件是数据的有序集合,可以包含文本、图像、音频、视频、程序等各种类型的信息。
在程序设计中,我们一般谈的文件有两种:程序文件、数据文件
1.1程序文件
源程序文件(xxx.c),目标文件 (windows环境后缀为.obj),可执行程序(xxx.exe)
1.2数据文件
程序运行时读写的数据
1.3文件名
文件名包括三部分:文件路径+文件名主干+文件后缀
2.文件的打开和关闭
2.1文件指针
每个被使用的文件都在内存中开辟了一个相应的文件信息去,用来存放文件的相关信息。这些信息是保存在一个结构体变量中的。该结构体类型是有系统命名的,为FILE
关于FILE可查看FILE
FILE*pf;//文件指针变量
2.2文件打开
使用fopen()函数,这个调用会初始化FILE的一个对象,类型FILE包含了所有用来控制流的必要信息。
FILE *fopen( const char *filename, const char *mode );//filename是字符串,用来命名文件
2.3文件关闭
使用fclose函数
int fclose( FILE *fp );//关闭成功返回零,关闭发生错误,返回EOF
2.4文件写入
写入到流中的最简单的函数:
int fputs(int c,FILE *fp);
函数fputc把参数c的字符值写入到fp所指向的输出流中,如果写入成功,它回返回写入的字符,如果发生错误,则返回EOF。
int fputs( const char *s, FILE *fp );
函数 fputs() 把字符串 s 写入到 fp 所指向的输出流中。如果写入成功,它会返回一个非负值,如果发生错误,则会返回 EOF。
2.5文件读取
int fgetc( FILE * fp );
fgetc() 函数从 fp 所指向的输入文件中读取一个字符。返回值是读取的字符,如果发生错误则返回 EOF。
char *fgets( char *buf, int n, FILE *fp );
函数 fgets() 从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区 buf,并在最后追加一个 null 字符来终止字符串。
如果这个函数在读取最后一个字符之前就遇到一个换行符 ‘\n’ 或文件的末尾 EOF,则只会返回读取到的字符,包括换行符。
fread函数以指定的字节数为单位从文件中读取数据,并将读取的数据存储在一个缓冲区中。
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
ptr:一个指向用于存储读取数据的缓冲区的指针。
size:要读取的每个元素的大小(以字节为单位)。
count:要读取的元素的数量。
stream:一个指向 FILE 结构的指针,它标识了要从中读取数据的文件流。
fread 的返回值是成功读取的元素数量,如果读取出现错误或已达到文件的末尾,则返回值可能小于 count。
#include <stdio.h>
int main() {
FILE *file;
file = fopen("xxx.txt", "rb"); // 以二进制读取模式打开文件(此目录下的文档)
if (file == NULL) {
perror("Error opening file");
return 1;
}
char buffer[100];//文件缓冲区的变量
size_t elements_read = fread(buffer, sizeof(char), 1, file);
if (ferror(file)) {
perror("Error reading file");
} else {
printf("%s",buffer);//打印缓冲区读取的字符
printf("Read %zu elements from the file.\n", elements_read);//打印所读取的数量
}
fclose(file);
return 0;
}
对于(输入)fwtire函数同样的道理
3.二进制 I/O函数
根据数据的组织形式,数据文件被称为文本文件或者二进制文件。
数据在内存中以二进制的形式储存,如果不加以转换的输出到外存,就是二进制文件
以ASCII字符的形式储存的文件就是文本文件。
fread函数和fwrite函数便是用于二进制输入和输出:
size_t fread(void *ptr, size_t size_of_elements,
size_t number_of_elements, FILE *a_file);
size_t fwrite(const void *ptr, size_t size_of_elements,
size_t number_of_elements, FILE *a_file);
4.文件缓冲区
ANSIC标准采用“缓冲文件系统:处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块”文件缓冲区“
文件缓冲区的存在使得程序能够将数据从内存一次性批量地写入文件,而不必每次写入一个字节或字符,这会显著提高文件操作的性能。
因为缓冲区的存在,在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件