在C语言中,文件一般分为文本文件和二进制文件两种。 文本文件是以ASCII码的方式存储的,文件里面的内容为字母、符号、数字啥的;而像可执行文件、图片、文字、声音啥的,就是二进制文件,二进制文件有其特殊的格式和计算机代码,以此才能将图片、文字等内容展现给我们。 而我们对于文件的操作,无非就是四步:打开、写入、读取、关闭。 1. 打开(fopen("文件名","操作")) image.png FILE是一个包含在头文件stdio.h中的结构体类型。一般设置一个指向FILE类型的指针变量来引用FILE类型变量。 FILE *fp=fopen("file.txt","r")中,fp为代表FILE结构类型的变量名,file.txt为文件名,r为要对文件进行的操作。而对文件的操作一般也只有r、w、a、r+、w+、a+六种模式,其中要注意的就是w在写的时候会先将文件原先的内容清空了再写。 2.读取 文件的读取方式有: 1.fgetc(fp) 一个一个的读,可以理解为file-get-char,char代表一个字符嘛,就是从fp指向的文件中一个一个的读取。 fgetc的使用: image.png image.png 2.fgets(str,200,fp) 一行一行的读,可以理解为file-get-string,string表示字符串嘛,也就是从fp指向的文件中一行一行的读取。我们在读取文件的时候不是进去读的,而是先将我们需要读取的内容先拿出来,拷贝到一个空间中,再让我们读取,char str[200],str就是读取时用来存放的位置,200就是这个位置的最大空间,fp就是我要读取的文件。 使用:image.png 其中打印str和打印p,结果是一样的。 3.fread(str,1,20,fp) image.png fread(str,1,20,fp)表示从fp中以一次读取20个字符的方式放到str中读取。需要注意的是fread这个函数最后会得到一个返回值,这个返回值,就是实际读取的大小,例如 int a=fread(str,1,20,fp); a的值就是20。

3.写入-"w"(清空了再写) 在上面我们知道了进行r读取操作时,fgetc表示读取一个字符,fgets表示读取一行字符串, fread就是想读多少都多少,那在进行w写的操作时,也有三个这样的函数,分别是fputc、fputs、fwrite,分别代表了写入一个字符、写入字符串、想写多少写多少这三个功能。 1.fputc('A',fp),表示在文件中写入一个字符A。 2.fputs(str,fp)image.png表示在文件中写入了一个字符串,而字符串的内容,我们可以自己定义。 3.fwrite(str,1,strlen(str),fp)image.png 跟fread一样,我们在写入的时候不是直接写入的,而是得先有一份临时空间又来存放我们写的内容,再将我们得内容写入进去。 这里还有一个特殊的函数fseek,意思是给文件内容定位,fseek有三种表示: 1.fseek(fp,n,SEEK_SET),SET是outset的意思,表示开头。n代表一个数字,表示定位到开头第n位。 2.fseek(fp,n,SEEK_CUT),CUT是current的意思,表示当前。表示定位到距离当前位置的第n位。 3.fseek(fp,-n,SEEK_END),END就是结尾。这里的n一般使用符号,表示定位到文件的倒数第n位。 image.png 关于a追加的操作,跟写入是一样的,区别就是w是清空了再写,而a可以理解为插入,一般配合fseek进行操作。

另外,还有rewind()函数和ftell()函数。 rewind(fp),表示将文件指针重置到文件的开头。 而ftell呢,就是得到文件的位置,再返回一个值,而返回的这个值,就是当前位置距离文件开头的字符。因此,我们常用ftell来计算文件的大小。image.png4.关闭文件--fclose(fp) 前面我们说到,我们在读和写的时候,都是先申请了空间,进行临时拷贝,再进行的读写,fclose()这个函数的功能,就是将那些缓冲区的数据,输出到内核缓冲区,也就是我文件实际存储的位置,并且释放这些缓冲空间。 如果不关闭,会造成数据的丢失。