Bootstrap

对文件的操作一

1.为什么使用文件

在我们之前写程序时发现当程序结束时,程序中的数据就消失了。为了保存数据,我们就将数据存放在文件中,以到达永久保存数据。

2.什么是文件

磁盘上的文件就是文件。
在程序设计时,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的).

2.1程序文件

包括源程序文件(后缀.c),目标文件(.obj),可执行文件(.exe).

2.2数据文件

文件的内容不一定是程序,而是程序运行的数据。比如程序运行需要读取的数据文件和输出内容的文件

2.3文件名

一个文件只有一个唯一的名字
文件名包含3个部分:文件路径+文件名主干+文件后缀
如:c:\code\test.txt

3.文件的打开和关闭

3.1文件指针

每一个在使用的文件都会在内存开辟一块文件信息区存放相关信息。这些信息存放在一个结构体变量中,这个结构体类型由系统声明,取名FILE.
我们无需关注细节过程,只要通过一个指针来维护这个FILE结构的变量,

FILE*pf;//文件指针变量

在这里插入图片描述

3.2文件的打开与关闭

FILE*pf=fopen("C:\\Users\\Administrator\\Desktop\\文件的操作\\1.dat", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	fclose(pf);
	pf = NULL;

fopen需要文件的地址为参数,但直接复制地址是无法运行,因为编译器将\和后面的字符当作转义字符,我们需要将每个斜杠\换为双斜杠\\
绝对路径:包含文件路径,文件主干,后缀的文件地址,可访问计算机上任意文件
相对路径:只包含文件主干和后缀,需要文件在当前程序的文件夹当中才允许访问
在这里插入图片描述
在“w"和“wb"中如果文件存在,会将原来内容清空,然后在写,没有就会在文件名下新建一个文件
“a”和“wa” 为了追加,不会将内容摧毁的条件下写。

4.文件的顺序读写

在这里插入图片描述
程序从文件中读取数据称为输入或读取
程序将数据写入硬盘(文件)称为输出或写入

流:高度抽象的概念。
在c语言程序运行时,会默认打开三个流
stdin—标准输入流—键盘
stdout—标准输出流—屏幕
stderr—标准错误流—屏幕

输入输出函数

fputc函数

写入文件

FILE*pf=fopen("1.dat", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fputc('b',pf);
	fclose(pf);
	pf = NULL;

写入屏幕

fputc('b',stdout);

fgetc函数

当读取成功时返回字符的ASCLL值。当读取失败或文件到达末尾时返回EOF.
从文件中读取数据

int ret=fgetc(pf);

从标准输入流中读取数据

int ret=fgetc(stdin);

fguts函数

	fputs("abcdef\n", pf);
	fputs("abcdef\n", pf);

想要在文本中换行要在fputs中体现出来

fgets函数

从文件中一行一行的读取数据

	char arr[10];
	fgets(arr, 4, pf);
	printf("%s\n", arr);

fgets函数第一个参数为读入后存放的地址,第二个参数为要读入的个数,第十个为文件指针
实际读入字符个数为第二个参数-1。因为还要给\0留位置
注意:当一行字符为读取完毕时,再次使用不会直接换行,而是继续从上一个的末尾开始读取。当一行读取完毕时,函数会自动停止。fgets函数会读取之前输入的换行符

fprintf函数

将格式化的数据(结构体)写入文件
参数类型:在printf函数的参数前面加上文件指针。

	struct S s = { "abcdef",10 };
	fprintf(pf, "%s %d\n", s.arr, s.a);

fscanf函数

	struct S s ;
	fscanf(pf, "%s %d\n", s.arr, &(s.a));
	printf("%s %d\n", s.arr, s.a);

fwrite函数

以二进制的方式写入文件

	struct S s ={"ertyu",10};
	fwrite(&s, sizeof(struct S), 1, pf);

字符串以二进制的形式写入和以文本类型写入无区别,但在。数字则不同,以二进制写入我们无法读懂。

fread函数

从二进制文件中读入数据

	struct S s ;
	fread(&s, sizeof(struct S), 1, pf);
	printf("%s %d\n", s.arr, s.a);
;