1.文件是什么,文件的唯一标识:三要素(路径,文件名,后缀)
文件:储存在外部介质上的数据集合
2.文件操作函数
2.1 fopen 返回值:文件指针FILE* 两个参数(第一个参数[文件名] 第二个参数[以什么方式打开文件] )
2.2 fclose 参数只有一个(释放的文件流指针) 1.防止内存泄露 2.未释放再次打开可能发生错误
2.3 fread 返回值:返回实际读取的项目数 四个参数(1.从文件中读取的数据存放在内存的哪个区域, 2.读取的项目的大小, 3.读取的最大项目数,4.从哪个文件里读取)
fread返回值如果小于输入缓存区大小 则一定读取完毕 否则不能保证一定读完
2.4 fwrite 返回值:返回实际写入的项数 四个参数(1.准备写入到文件里的数据, 2.写入的项目的大小 3.写入的项目的个数 4.被写入的文件在哪)
2.5 fseek 调整文件中光标的位置 SEEK_SET SEEK_CUR SEEK_END
2.6 ftell 告诉我光标在文件中的位置 返回值是一个整形值 代表着光标距离文件开始位置多少字节
3.数据流(输入流和输出流) 标准输入流设备:键盘 标准输出流设备:屏幕
3.1 文本数据流(文本文件 .TXT)
3.2 二进制数据流(二进制文件 歌曲 视频 图片 可执行文件)
3.3 输入流(从文件向内存中写) 输出流(从内存向文件中写)
4.文件操作步骤: 1.打开文件 2.执行文件操作函数 3.关闭文件
5.文件指针
6.文件的绝对路径和相对路径
7.分别对于二进制文件和文本文件进行读写
8.注意事项:fopen函数 如果模式为"w" 则如果里面有数据 会清空再打开 导致数据丢失
int main()
{
const char* path = "1.txt";//相对路径
const char* path2 = "C:\\1.txt";//绝对路径
FILE* fw = fopen(path,"w");
//int a = 123456;
const char* str = "123456";
//fwrite(&a, sizeof(int), 1,fw);
fwrite(str, sizeof(char), strlen(str), fw);
fclose(fw);
return 0;
}
//从内存向文本文件写数据(输出流)
int main()
{
const char* path = "xyz.txt";//相对路径
FILE* fw= fopen(path, "w");//通过写的方式打开
const char* str = "hello world";
fwrite(str, sizeof(char), strlen(str), fw);
fclose(fw);
return 0;
}
//从文本文件中读数据写到内存中(输入流)
int main()
{
const char* path = "xyz.txt";//相对路径
FILE* fr = fopen(path, "r");//只读权限打开
//需要申请一块内存用于存储 从文件中分部读取的数据
char buff[100];
int len=fread(buff, sizeof(char),100 , fr);
//一个一个字符来读取的循环方法
char cr;
while (fread(buff, sizeof(char), 1, fr) > 0)//读取成功:1;读取失败:0
{
printf("%c",cr);
}
printf("\n");
fclose(fr);
return 0;
}
//从内存向二进制文件写数据(输出流)
int main()
{
FILE* fwb = fopen("abc.txt", "wb");//通过写的方式打开
int arr[] = { 12,23,34,45,56,67,78,89,90,100 };
fwrite(arr,sizeof(arr), sizeof(arr)/sizeof(arr[0]),fwb);
fclose(fwb);
return 0;
}
//从二进制文件中读数据 写到内存中(输入流)
int main()
{
FILE* frb = fopen("abc.txt", "rb");//只读权限打开
//需要申请一块内存用于存储 从文件中分部读取的数据
int tmp;//类似上面的buff
while (fread(&tmp, sizeof(int), 1, frb) > 0)//读取成功:1;读取失败:0
{
printf("%d", tmp);
}
printf("\n");
fclose(frb);
return 0;
}
//fseek
int main()
{
const char* str = "www.txt";
FILE*fw=fopen(str, "w");
const char* str1 = "hello world";
const char* str2 = "wwww,yyyyy";
fwrite(str1, sizeof(char), strlen(str1), fw);
fseek(fw,0,SEEK_SET);//调整参数的位置
fseek(fw, -5, SEEK_END);//调整参数的位置,向左走5步,SEEK_END表示从结束位置开始
fseek(fw, 8, SEEK_SET);//调整参数的位置,从开始位置向右走8步,SEEK_SET表示开始位置
fwrite(str2, sizeof(char), strlen(str2), fw);
long flg = ftell(fw);//ftell:获取文件指针的当前位置
printf("%d\n", flg);
fseek(fw, -10, SEEK_CUR); //SEEK_CUR表示当前位置
flg = ftell(fw);
printf("%d\n", flg);
fclose(fw);
return 0;
}