C语言 第十章 文件操作

第十章 文件操作

文件

文本文件

也称ASCII码文件,每字符占一个字节存储,每字节保存的是字符的ASCII码。可用文本编辑器打开查看,例如.txt、代码源程序.c、等等

二进制文件

以二进制编码的形式保存,例如可执行文件(.exe)、位图文件(.bmp)、word文件(.docx)等都属于二进制文件。这种文件不能用文本编辑器打开查看,强行打开会乱码,无法读懂。

优点

“全部看作二进制”,输入输出的开始和结束由程序控制而不受换行、空格等字符的限制;比文本文件一般体积小,节省存储空间。

文件的读写

文件操作步骤

1
2
3
4
5
6
7
8
9
10
11
// 定义文件指针
FILE *fp;

// 打开文件(使文件指针关联文件)
fp = fopen(文件名,打开方式);

// 读写文件
// 通过调用系统库函数读写文件,函数中都需要一个文件指针参数fp

// 关闭文件(断开文件指针和文件的关联)
fclose(fp);

向文件写入字符串

如果文件事先已经存在,则会被删除重;如不存在,则直接新建。

fprintf()为写入文件

1
2
3
4
5
6
7
8
9
#include <stdio.h>

int main()
{
FILE *fp;
fp = fopen("file.txt","w");
fprintf(fp, "abc");
fclose(fp);
}

fopen(char *filename, char *mode)

filename:要打开的文件名称

mode:文件访问模式

modeintroduceremark
r允许读文件(read文件必须存在,否则出错
w允许覆盖写文件(write)文件必须被新建(如文件已存在会删除源文件,然后新建)
a允许追加写文件(append文件不存在时才新建,否则只在源文件末尾添加数据
+即允许读也允许写文件
b以二进制格式打开文件(binary
t以文本格式打开文件(text

C语言常用文本文件读写函数

函数功能用法
fgetc或getc从当前位置指针处读取文件中的一个字符(1个字符占1个字节),读取后,读写位置指针自动后移1字节字符变量=fgetc(fp);
fputc或putc在当前位置指针处向文件中写入一个字符(1个字符占1个字节),写入后,读写位置指针自动后移1字节fputc(字符, fp);
fgets读取文件中的一个字符串,读写位置指针自动后移fgets(字符数组名, n, fp);
fputs在当前位置指针处向文件中写入一个字符串(不写入’\0’字符,最后也不自动加’\n’);写入后,位置指针自动后移该字符串长度的字节。fputs(字符串首地址, fp);
fscanf从当前位置指针处按格式读取文件中的多个数据,类似于scanf,只不过不是从键盘输入,而是从文件中读取;读取后,位置指针自动后移fscanf(fp, “格式控制字符串”, 变量1的地址, 变量2的地址, …);
fprintf在当前位置指针处按格式向文件中写入多个数据,类似于printf,只不过不是显示到屏幕上,而是写入到文件中;写入后,位置指针自动后移fprintf(fp, “格式控制字符串”, 数据1, 数据2, …);

C语言常用二进制文件读写函数

函数功能用法
fread从当前位置指针处读取文件中的一批字节,这批字节由count个数据块、每数据块长size个字节组成,共size*count个字节。所读取的字节存入参数buffer地址开始的一段内存空间。读取后,文件位置指针跟随后移实际读取的字节数。函数返回实际读取的数据块数(如读到文件尾或出错,实际读取的数据块数可能小于count)fread(buffer, size, count, fp);
fwrite在当前位置指针处向文件中写入一批字节,这批字节位于内存中参数buffer地址开始的一段内存空间,由count个数据块、每数据块长size个字节组成,共size*count个字节。写入后,文件位置指针跟随后移实际写入的字节数。函数返回实际写入的数据块数(如写入出错,实际写入的数据块数可能小于count)fwrite(buffer, size, count, fp);

C语言常用文件位置指针定位库函数

函数功能用法
rewind把文件位置指针移到文件开头rewind(fp);
fseek把文件位置指针从ori开始的位置,向文件尾部(n>0时)或文件首部(n<0时)移动n个字节。ori可有3种取值: 0、1、2分别表示从文件首、当前位置和文件尾开始移动, 0、1、2也可分别写为符号常量SEEK_SET、SEEK_CUR、SEEK_ENDfseek(fp, n, ori); 一般n为long型,常量加字母后缀L(l)
ftell若执行成功,函数返回当前文件位置指针的位置(文件中第一个字节的位置为0);若执行失败,函数返回-1n = ftell(fp);
feof判断读文件是否已越过了文件末尾if (feof(fp) ) …