1.
程序文件:源程序文件,目标文件,可执行文件
数据文件:不是程序,而是供程序运行时读写数据
2.
流:数据如流水一样从一处流向另一处
3.
二进制文件:以二进制存储(存储在内存的数据映像—映像文件)
文本文件(ASCLL文件):看得懂的文件
10000以二进制文件输出占用4字节
以文本文件输出占用5字节
4.
文件缓冲区
内存将缓冲区在以下情况下向磁盘输入数据
1.文件缓冲区满了
2.程序退出
5.
写平衡 :防止数据都只在低地址写数据,而高地址一直得不到使用,使磁盘利用不均衡,低地址部分由于频繁使用而造成磨损,大大减少使用寿命。所以,为了防止以上情况发生,磁盘总是在数据末端紧跟着写,不会在删除的地方填入。
fopen(文件名 ,使用方式)
FILE *p=fopen(“ ”, “r”);
fopen( )系统调用
“r”(只读)读取打开,文件必须存在
“w”(只写),上一次文件内内容会被销毁
“a”追加
“rb”(只读)打开二进制文件夹,为了读出数据
“rw”(只写)为了写入数据,打开二进制文件夹
“r+”为了读和写,打开文本文件
“w+”为了读和写,建立新文本文件
“a+”为了读和写,打开文本文件
“rb+”为了读和写,打开二进制文件
“wb+”为了读和写,建立新二进制文件
“ab+”为了读和写,打开二进制文件
assert 断言
If(fr == NULL)//release
{
printf(“file is NULL”);
}
fread(读到哪,每次读多少,读几次,从哪读)
返回值:成功返回读几次,失败返回0;
fclose(文件指针)
int main()
{
char *path = "e:\\1.txt";//第一个‘\’为转义字符
FILE *fr = fopen(path, "r");//用r方式打开path路径下的文件
// ( 路径,使用方式)
assert(fr != NULL);
if (fr == NULL)
{
printf("*fr file is NULL");
}
char buff[100] = "";
fread(buff, sizeof(char), 100, fr);
// (读到哪,每次读多少,读几次,从哪读)
fclose(fr);//关闭文件
printf("%s\n", buff);
}
fwrite(写什么,每次写多少,写几次,写到哪)
int main()
{
char *path = "e:\\1.txt";
FILE *fw = fopen(path, "w");
assert(fw != NULL);
//char *str = "sb LYF";
//fwrite(str, sizeof(char), strlen(str), fw);
int a = 10;
fwrite(&a, sizeof(int), 1, fw);//写文件,每写一次覆盖一次
fclose(fw);
return 0;
}
fseek(文件指针类型,位移量,起始点)
改变文件位置标记,一般用于二进制文件,也可以用于文本文件。
起始点:
SEEK_SET 文件指针开头 –0
SEEK_CUR 文件指针当前位置–1
SEEK_END 文件指针结尾 –2
位移量:以起始点为基点,向前移动的字节数应为long型数据(在数字末尾+L)
文件指针:应该为已经打开的文件。如果没有打开的文件,那么将会出现错误。
返回值:成功,返回0,失败返回-1,并设置error的值,可以用perror()函数输出错误。
int main()
{
char *path = "e:\\1.txt";//hello
FILE *fr = fopen(path, "r");
assert(fr != NULL);
char ch;
while (fread(&ch, sizeof(char), 1, fr) > 0)
{
putchar(ch);
}
fseek(fr,-2,SEEK_CUR);//光标的移动
while (fread(&ch, sizeof(char), 1, fr) > 0)
{
putchar(ch);//hellolo
}
}
读出来不一致,需要检查文本,是不是UTF-8编码
fscanf(文件指针,格式字符串,输出列表)
fprintf(文件指针,格式字符串,输入列表)
int main()
{
char buff[100] = "";
FILE *fr = fopen("e:\\1.txt", "r");
assert(fr != NULL);
FILE *fw = fopen("e:\\2.txt", "w");
assert(fr != NULL);
fscanf(fr ,"%s",buff);
fprintf(fw,"%s",buff);
//int n=fread(buff, sizeof(char), 100 , fr);//返回值为读几次
//fwrite(buff,sizeof(char), n, fw);
printf("%s", buff);
}
题1:从键盘输入字符串,打印到屏幕上 键盘stdin 屏幕stdout
int main()
{
char buff[100] = "";
int n=fread(buff, sizeof(char), 10, stdin);
fwrite(buff, sizeof(char), n, stdout);
fflush(stdout);
return 0;
}
题2:拷贝视屏函数, 把文件“亮剑01.mp4”–>D:\老李.mp4
void Copy_mp4(char *des, char *src)
{
assert(NULL != des || NULL != src);
FILE *fr = fopen(src, "rb");
assert(fr != NULL);
FILE *fw = fopen(des, "wb");
assert(fw != NULL);
char ch;
int len;
while ((len = fread(&ch, sizeof(char), 1, fr)) > 0)
{
fwrite(&ch, sizeof(char), len , fw);
}
fclose(fr);
fclose(fw);
}
int main()
{
char *des = "d:\\老李。mp4";
char *src = "e:\\亮剑01.mp4";
Copy_mp4(des, src);
return 0;
}