目录
一、什么是文件?
在电脑磁盘的上的文件。在程序设计中,分为两种:程序文件、数据文件。
程序文件:源程序文件(后缀为.c) 目标文件(windows环境后缀为.obj) 可执行程序(Windows环境后缀为.exe)
数据文件:程序运行时读写的数据,例如程序运行需要从中读取数据的文件或者输出内容的文件
二、C语言如何操作文件
1.操作方式
在C程序里,文件分为 A.文本文件(存放字符/文字的文件.txt)
B:二进制文件(.data)把结构体的信息写入的文件被称为二进制文件对文档的操作方式主要有2种:
读操作:从文件里面把文件的内容取出来,并输出到屏幕(不会改变文件的内容)
写操作:把一些内容往文件里面写入(会改变文件的内容)
注:每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE。
2.文件指针
我们已经知道了,C语言对于文件的操作,那我们具体如何操作呢? 我们可以使用文件指针,顾名思义,文件指针是指向文件的指针,存放的是文件首地址。
2.1 定义文件指针
创建一个FILE*的指针变量:
FILE* pf;文件指针变量
定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个 结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变 量能够找到与它关联的文件。
2.2文件的打开与关闭
文件在读写之前,需要打开文件,使用结束后应该关闭文件
ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件。
- //打开文件
- FILE *pf = fopen("要打开的文件名","打开方式");
- //关闭文件
- int fclose ( pf );
打开方式,便是读、写等操作。
代码实例:
-
- #include <stdio.h>
- int main ()
- {
- //打开文件 使用"w",如果不存在myfile.txt,则会创建此文件
- FILE *pFile = fopen ("myfile.txt","w");
- //文件操作
- if (pFile!=NULL)
- {
- //fputs是将字符串输入到文件当中。
- fputs ("fopen example",pFile);
- //关闭文件
- fclose (pFile);
- }
- return 0;
- }
2.3文件的顺序读写
在之前的代码里,我们可以看见一个函数fputs,该函数是文本行输出函数,在C程序里,任 何数据不会直接输出到对应的设备,而是会通过三个流,对应地传递过去。
顺序读写步骤:打开、读取(只能从头开始读写)、关闭
而同样,有些函数在传输的时候也会有限制,并不适合所有的流。 顺序读写的函数名和传输 限制如下:
举个例子 :
- struct S
- {
- char name[20];
- int age;
- float score;
- };
-
- //测试二进制的写函数:fread
- int main()
- {
- struct S s = { 0};
- // 文件使用 “只读” 且是二进制
- FILE* pf = fopen("test.txt", "rb");
- if (NULL == pf)
- {
- perror("fopen");
- return 1;
- }
- //读文件 freed也是二进制输入
- fread(&s, sizeof(struct S), 1, pf);
- printf("%s %d %f\n", s.name, s.age, s.score);
-
- //关闭文件
- fclose(pf);
- pf = NULL;
- return 0;
- }
如代码,重点强调:FILE* 指针访问的是文件信息区的地址,并且这些信息都是存放在结构体 其他函数用法就不一一解释了,可以通过MSDN查找,学习。
2.3文件的随机读写
随机读写,就是想读哪个位置就读哪个位置,指哪打哪的意思。
1.fseek函数
根据文件指针的位置和偏移量来定位文件指针
文档指针 光标移动位
使用:int fseek ( FILE * stream, long int offset, int origin )
origin 的值 光标位置 SEEK_SET 文件开头 SEEK_CUR 文件指针当前位置 SEEK_END 文件结尾
代码实例:
- #include <stdio.h>
- int main()
- {
- FILE* pFile;
- pFile = fopen("example.txt", "wb");
- fputs("This is an apple.", pFile);
- fseek(pFile, 11, SEEK_SET);
- fputs("sam", pFile);
- fclose(pFile);
- return 0;
- }
代码详解图:
2.ftell函数
返回文件指针相对于起始位置的偏移量
文档指针
long int ftell ( FILE * stream );
3 rewind
让文件指针的位置回到文件的起始位置void rewind ( FILE * stream );
随机读写函数的总结:
第一个函数是控制光标移动 第二个函数是返回光标移动的偏移量, 第三个函数是光标回到初始位置
总结
文档操作,主要弄清楚以下问题
文件的分类,C语言如何访问文档,又该如何操作,文件的信息存放在哪?以什么方式存放。
上述问题,全在博客之中,有着清晰明了的讲解,一点点深入了解文件
---------来自菜鸟TQ02