学习笔记C_6 文件

本文介绍了C语言中文件的基本处理,包括文件指针、缓冲区、IO流等概念,以及文件的打开、关闭、重命名、删除操作。详细讲解了文本文件和二进制文件的区别,以及各种读写模式的应用,如覆盖写入、追加、读取不同类型变量等内容。
摘要由CSDN通过智能技术生成

第一章 文件的基本处理(处理模型)

1.1 理解文件指针、缓冲区、IO流等基本概念

 数据持久化

1.2 文件的基本操作:打开、关闭、删除、重命名等

//2 用r只读模式打开文件流
    FILE* readFile = fopen("E:/vs/testfile/acdc.txt","rb");

//3 用w只写模式 打开并创建文件
	FILE* p = fopen("E:/vs/testfile/kaz.txt", "wt");

//4 给文件改名:已有名字,新的名字
	int ok = rename("E:/vs/testfile/kaz.txt", "E:/vs/testfile/卡兹.txt");
	printf("%d\n", ok);

//5 删除文件:
	ok = remove("E:/vs/testfile/卡兹.txt");
	printf("%d\n", ok);

1.3 二进制文件与文本文件的基本概念

文本文件:内容以字符编码保留的文件

二进制文件:在内存中什么样,平移到文件中还是什么样

第二章 文本文件读写操作

2.1 理解文件只读、读写、追加等打开方式的区别

2.1.1 写操作 

stdint 标准输入(键盘缓冲区)

stdout 标准输出(屏幕输出)

//1 覆盖重写模式
	FILE* pf = fopen("E:/vs/testfile/acdc.txt", "wt");
	if (pf != NULL) {
		/*打印到屏幕:
			printf("%d %.2f %c %s\n",88,3.14159,'A',"hello");
			puts("How old are you !");
			putchar('M');
		*/
		fprintf(pf, "%d %.2f %c %s\n", 88, 3.14159, 'A', "hello");
		fputs("How old are you !\n", pf);
		fputc('M', pf);

		fclose(pf);
		pf = NULL;
	}
//2 打开追加模式
	FILE* pf = fopen("E:/vs/testfile/acdc.txt", "at");

2.1.2 读操作 

//1 读取若干个整数
	FILE* pf = fopen("E:/vs/testfile/acdc.txt", "rt");
	if (pf) {
		int num;
		while (!feof(pf) && fscanf(pf, "%d,", &num)>0) {	//End Of File 文件尾部
			printf("%d\n", num);
		}
	}
//2 读取若干行文字
	FILE* pf = fopen("E:/vs/testfile/acdc.txt", "rt");
	if (pf) {
		char str[20];
		while (!feof(pf) && fscanf(pf, "%s", &str)>0) {	//End Of File 文件尾部
			printf("%s\n", str);
		}
	}

在C环境下读取汉字使用ANSI单字节编码 

2.1.3 读写混合

FILE* pf = fopen("E:/vs/testfile/letter.txt", "r+t");
	if (pf) {
		//文件光标
		//1查看光标
		printf("当前光标:%ld\n", ftell(pf));
		//读取数据 查看光标
		printf("读取:%c\n", fgetc(pf));
		printf("当前光标:%ld\n", ftell(pf));
		printf("读取:%c\n", fgetc(pf));
		printf("当前光标:%ld\n", ftell(pf));
		char str[5] = { 0 };
		fscanf(pf, "%4s", str);
		printf("读取四个字符%s\n", str);
		printf("当前光标:%ld\n", ftell(pf));
		//让光标回到文件开头
		rewind(pf);
		fpos_t index = 10;
		fsetpos(pf, &index);	//设置数据
		fscanf(pf, "%4s", str);
		fgetpos(pf, &index);	//取数据
		printf("读取四个字符%s\n", str);
		printf("当前光标:%ld\n", ftell(pf));
		
		//读写混合
		//如果改写,需要重定位光标 “覆写”
		fseek(pf, 0, SEEK_CUR);
		fputc('8', pf);
		fseek(pf, 1, SEEK_SET);
		fprintf(pf, "%s", "1234");
		fseek(pf, -2, SEEK_END);
		fputc('*', pf);
		fclose(pf);
		pf = NULL;
	}

2.2 向文本文件中写入不同类型变量中的数据

2.3 从文本文件中读取字符串存入不同类型的变量存储

2.4 理解文件游标的意义与用法

第三章 二进制文件读写操作

3.1 将不同类型变量的数据存入二进制文件


	FILE * writeFile=fopen("E:/vs/testfile/data.txt","wb");
	//1 存储一个整型变量
	int a = 97;
	fwrite(&a, sizeof(int), 1, writeFile);
	//2 存储一个数组
	int arr[] = { 65,66,97,98,48,49 };
	fwrite(arr, sizeof(int), 6, writeFile);
	fwrite(arr, sizeof(int[6]), 1, writeFile);

3.2 将二进制文件数据读取还原到不同类型的变量

	FILE * readFile=fopen("E:/vs/testfile/data.txt","rb");
	//1 读取一个整型变量
	
	//2 读取一个数组
	int arr[13];
	int len = fread(arr, sizeof(int), 100, readFile);	//返回值:成功读取的数量
	for (int i = 0; i < len; i++)
		printf("%d ", arr[i]);

3.3 文件复制的原理与代码实现

FILE * from = fopen("E:/vs/testfile/123.mp4","rb");
	FILE * to = fopen("E:/vs/testfile/321.mp4","wb");
	unsigned char buffer[1024];	//保留1k
	int len;	//每次读取长度
	if (from && to) {
		while ((len = fread(buffer, sizeof(char), 1024, from)) > 0) {
			fwrite(buffer, sizeof(char), len, to);
		}
		fclose(from);
		fclose(to);
		from = to = NULL;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值