标准C语言12

文件的分类:

    文本文件: 存储的是ASCII码的二进制(人能看懂)

    二进制文件: 存储的是数据的补码

文件IO:

    FILE* fp = fopen(const char* path,const char* mode);

    功能: 打开或创建文件

    path: 文件的路径

    mode: 打开的模式

        r   以只读权限打开文件,如果文件不存在则打开失败

        r+  在r的基础上增加写权限

        w   以只写权限打开文件,如果文件不存在则新建,如果文件存在就清空

        w+  在w的基础上增加读权健

        a   以只写权限打开文件,如果文件不存在则新建,如果文件存在则不清空,新写入的数据在文件的末尾

        a+  在a的基础上增加读权限

    注意: 以上方式以文本形式操作文件,在它们基础上加b表示以二进制方式操作文件

    返回值: 结构指针,也称为文件指针,不需要关心它的成员,只需要知道它是操作文件的凭证,如果值是NULL表示文件操作失败

    int fclose(FILE* fp);

    功能: 关闭文件

    二进制方式读写文件:

        fwrite

            size_t fwrite(const void* ptr,size_t size,size_t nmemb,FILE* stream);

                    功能: 把内存中的数据写入到文件中

                    ptr: 内存首地址

                    size: 一次写入多少个字节

                    nmemb: 写入多少次

                    stream: 文件指针,fopen的返回值

                    返回值: 成功写入的次数

练习1: 定义一个教师结构体变量并初始化,以二进制形式写入文件中(以二进制方式写)

    

        fread

            size_t fread(void* ptr,size_t size,size_t nmemb,FILE* stream);

                    功能: 从文件中读取数据到内存中

                    ptr: 存储从文件中读取的数据内存首地址

                    size: 一次读取的字节

                    nmemb: 读取多少次

                    stream: 文件指针,fopen的返回值

                    返回值: 成功读取到的次数

练习2: 从文件中读取数据到一个教师结构体变量中并显示(以二进制方式读)

    文本方式读写文件:

        int fprintf(FILE* stream,const char* format,...);

        功能: 以文本形式写入数据到文件中

        stream: 要写入的文件

        format: 占位符和提示信息

        ...: 变量列表

        返回值: 成功写入的字节数

        int fscanf(FILE* stream,const char* format,...);

        功能: 从文件中读取数据到变量中

        stream: 要读取的文件指针

        format: 占位符

        ...: 变量地址列表

        返回值: 成功读取到的变量个数

练习3: 定义一个教师结构体变量并初始化,以文本形式写入到文件中

练习4: 从文件中以文本形式读取到教师结构体中并显示

    文件的随机读写:

        文件的位置指针:

            每个打开的文件都有一个指针记录着操作的位置,它会随着读写函数的执行而移动,以r、r+、w、w+模式打开文件位置指针在开头,以a、a+打开文件位置指针在文件末尾

        如果想要随机读写文件的任意位置的数据,只需要手动设置文件的位置指针即可

        int fseek(FILE* stream,long offset,int whence);

        功能: 设置文件的位置指针

        stream: 要设置的文件

        offset: 偏移值

        whence: 基础位置

            SEEK_SET    文件开头

            SEEK_CUR    当前位置

            SEEK_END    文件末尾

        返回值: 成功返回0、失败返回-1

        void rewind(FILE* stream);

        功能: 把文件位置指针设置到开头

        long ftell(FILE* stream);

        功能: 获取文件位置指针的位置

        返回值: 第几个字节

        int feof(FILE* stream);

        功能: 检查文件位置指针是否到达末尾

        返回值: 返回0说明到达文件末尾

        char* fgets(char* s,int size,FILE* stream);

        stdout: 从文件中读取一行字符串

        int fputs(const char*s,FILE* stream);

        功能: 写入一个字符串到文件中,自动在末尾添加\n

        返回值: 成功写入的字符个数

        int remove(const char* pathname);

        功能: 删除文件

        返回值: 成功返回0,失败返回-1

        int rename(const char* oldpath,const char* newpatch);

        功能: 重命名文件

        返回值: 成功返回0,失败返回-1

main函数的参数:

    是为了获取命令行附加的参数

    argc: 代表参数的个数

    argv: 每个字符串参数的首地址

    注意: ./a.out一定是第一个参数

练习5: 实现cp命令的功能

    cp src dest

    1、以r打开src文件,以w创建dest文件

    2、边读边写,知道文件读到末尾结束

    3、关闭文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值