文件

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值