第九章 操作文件

第一节 认识文件

  • 文件:通常计算机包含各种不同类型的文件,例如照片、音乐、.c文件等。文件包含程序文件数据文件。将数据的输入和输出的过程称为数据流。一个文件包含文件路径、文件标识符、文件后缀,例如D:\C_program\8\Debug\7.exe,后缀名exe(可执行文件)、txt(文本文件)、doc(word文件)、mp4(视频文件)、mp3(音频文件)。

  • 文件的分类:数据文件分为ASCII文件二进制文件,数据在内存中是以二进制的形式进行存储的。

  • 文件缓冲区:从磁盘中读取数据,会先将数据存储到输入文件缓冲区中,等文件缓冲区装满了以后发送到程序数据区;输出文件到磁盘中,会现将数据存储到输出文件缓冲区中,等文件缓冲区装满了以后再发送给磁盘。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iSLSB9jQ-1590584641339)(E:\workspace\TyporaProjects\C笔记\网易-C程序设计第四版\images\第九章\9-1.png)]

第二节 文件的操作

  • 对文件的操作方法

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-az6BMbV3-1590584641342)(E:\workspace\TyporaProjects\C笔记\网易-C程序设计第四版\images\第九章\9-2.png)]

  • 打开文件

    打开文件不同于操作系统打开文件,打开文件的方法为:fopen(文件名, 操作模式)fopen为打开函数,文件名为需要打开的文件,操作模式为需要对文件进行何种操作。一旦文件被打开,在内存中开辟区域存放文件的有关信息(如文件的名字、文件的位置、文件的状态等)并返回此信息。定义一个FILE类型的指针变量指向被打开文件,可以将文件信息和指针变量进行关联。之后都可以对文件型指针变量进行操作,打开文件的常用方法为:

    FILE *fp
    fp = fopen(文件名, 操作模式)
    
  • 操作模式:

    1. “r” :读模式,允许对文件读取信息。若文件名不正确,则报错;
    2. “w” :写模式,允许向文件写入信息。若文件不存在,则创建一个文件;
    3. “a” :追加模式,允许在文件末尾添加信息。若文件名不正确,则报错;
    4. “rb” “wb” “ab” 打开二进制文件,其他与以上3个相同;
    5. “r+” “w+” "a+"允许对文件读取和写入信息,其他与前3个相同;
    6. “rb+” “wb+” "ab+"允许对文件读取和写入信息,打开二进制文件,其他与前3个相同。
  • 关闭文件fclose(文件指针)

    文件使用后需要关闭文件,如果没有及时关闭文件可能会导致数据丢失,关闭成功返回一个数值0,否则返回EOF(-1)

第三节 文件的读写

  • 文件打开之后,根据文件的打开模式,可以进行读写。

  • 向文件读取字符fgetc(fp)

    功能:从fp指向的文件获取一个字符。如果读取成功返回获取的字符,读取失败则返回文件结束标志EOF(-1)

  • 向文件写入字符fputc(c, fp)

    功能:向fp指向的文件写入一个字符。如果写入成功则返回写入的字符,写入失败则返回文件结束标志EOF(-1)

  • 向文件读取字符串fgets(str, n, fp),

    功能:从fp指向的文件获取一个长度为n-1的字符串,并一次性存入到str字符数组中。如果读取成功返回str指针,读取失败则返回NULL

    注意:

    1. 读取的n-1个字符,最后加上一个结束标志\0,一共n个字符串;
    2. 遇到换行符或文件结束标志EOF,则将之前的内容存储到str中,不再继续读取字符,表示本次读取结束(最多读取一行)。
  • 向文件写入字符串fputs(str, fp)

    功能:将str字符数组中的内容(字符串)写入到fp指向的文件中,如果写入成功返回数字0,写入失败则返回非0的数字。

  • 格式化读写内容

    fprintf(文件指针, 格式字符串, 输出表列)

    fscanf(文件指针, 格式字符串, 输入表列)

    与printf、scanf函数相同,不同点在于不是输出到黑框的终端或者在终端输入信息,而是向文件写入信息或读取信息。

  • 向文件读取一个数据块

    读取数据时,数据不经过转换的读取到内存中。

    fread(buffer, size, count, fp)
    参数:
        buffer:读取的数据存入内存地址
        size:读取的字节大小
        count:读取数据的个数
        fp:读取的文件指针
        返回值:返回读取数据的个数
    
  • 向文件写入一个数据块

    写入数据时,数据不经过转换的读取到内存中。

    fwrite(buffer, size, count, fp)
    参数:
        buffer:待写入的内存地址buffer
        size:写入的字节大小
        count:写入数据的个数
        fp:写入的文件指针
    
  • 注意:

    1. 由于fread、fwrite函数读写数据时不会转换数据,因此读取速度快;
    2. 读取二进制文件一般使用fread、fwrite函数;
    3. fgetc、fputc、fgets、fputs、fprintf、fscanf函数是读写字符数据,不建议用读取二进制文件。

第四节 改变文件读写位置

  • 思考:

    文件的读写总是从文件的开头起始,一直读写到最后,但如果文件内容较多,只需要获取某个文件指定位置的数据,这种方法就比较麻烦。不能快速获取指定位置数据。

  • 文件读写指针:

    文件读写标记记录访问的位置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nk1oaiKp-1590584641344)(E:\workspace\TyporaProjects\C笔记\网易-C程序设计第四版\images\第九章\9-4.png)]

  • rewind函数将读写指针重新指向文件开头

    rewind(fp)	//将fp指向的文件读写指针重新指向文件开头
    
  • fseek函数指定文件读写指针位置

    fseek(文件指针, 位移量, 起始点)
        起始点:
        0		表示文件开始位置
        1		表示当前读写指针位置
        2		表示文件末尾位置
    

第五节 文件操作错误检查

读写函数是否存在错误,除了使用函数的返回值来检验以外,还可以使用错误检查读写函数是否正确执行。

  • ferror函数

    ferror(fp)
    //返回值为0表示读写正确
    //返回值为1表示读写错误
    
  • clearerr函数

    将文件错误标志和文件结束标志置为0。当ferror检查到读写函数出现错误,此时应当立即调用clearerr(fp),使得下一轮能正常使用ferror函数进行检查。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值