第一章 文件的基本处理(处理模型)
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;
}