C语言的文件读取

文件类型

从编程角度我们把文件分为两大类,分别是文本文件、二进制文件。
二进制文件:存储的是数据的补码,无法用直接打开,好处是读取文件后就可以直接使用。
文本文件:把数据以字符形式存储到文件中,可以被直接打开,检查数据是否正确,但读写都需要进行数据转换。

打开文件

//功能:打开、创建文件
//path:文件的路径
//mode:打开文件模式
//返回值:是一个FILE结构指针,如果文件打开失败,返回NULL
FILE *fopen(const char*path, const char* mode);

​ “r” 以只读方式打开文件,如果文件不存在则打开失败。
​ “r+” 在r的基础上增加写权限。

​ “w” 以只写方式打开文件,如果文件不存在则创建,如果文件存在则清空文件。
​ “w+” 在w的基础上增加读写权限。

​ “a” 以只写方式打开文件,文件不存在则创建,如果文件存在则新写入的内容添加到文件末尾。
​ “a+” 在a的基础上增加读权限。

FILE结构中记录的是被打开文件的相关数据,它是接下来读写和操作文件的凭证。

注意:如果文件本身没有相关权限则会打开失败!可以通过ls -l filename查看一下文件权限 r读 w写 x执行

关闭文件

int fclose(FILE *stream);

文本文件的写入

//功能:以文本格式写入数据到文件。
//stream:要写入的文件,fopen的返回值。
//format:占位符。
//...	  要写入的变量
//return:写入的字节数
int fprintf(FILE* stream, const char* format, ...);

文本文件的读取

//功能:从文本文件中读取各类型的数据。
//stream:要读取的文件,fopen的返回值。
//format:占位符。
//...		要读入的变量
//return:读取的字节数
int fscanf(FILE* stream, const char* format, ...);

二进制文件的写入

//功能:把内存的数据拷贝到文件中
//ptr:要写入数据的内存首地址	
//size:数据的单个元素字节数
//nmemb:元素的个数
//stream:文件指针
//返回值:成功写入元素的个数,正常情况下应该为nmemb
size_t fwrite(const void *ptr, size_t size, size_t nmemb,ILE *stream);

二进制文件的写入

//功能:从文件拷贝数据到内存
//ptr:存储数据的内存首指针
//size:数据的单个元素字节数
//nmemb:要读取的元素个数
//stream:文件指针
//返回值:成功读取元素的个数
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

随机读取

每个打开的文件都有一个指针记录着该文件读写到哪里了,该指针被称为文件的位置指针,位置指针会随着文件的读写自动移动。

“r”, "r+"打开的文件位置指针指向文件的开头
“a”, "a+"打开的文件位置指针指向文件的末尾

//功能:设置文件的位置指针
//stream:要设置的文件
//offset:偏移值
//whence:基础位置
//返回值:成功返回0,失败返回-1
int fseek(FILE *stream, long offset, int whence);

//功能:把文件的位置指针调整到开头
void rewind(FILE *stream);

//功能:获取文件位置指针所指向的字节数
long ftell(FILE *stream);

版权声明:本文为Makina原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。