关于文件的操作

     我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了。如果想要把数据进行持久化的保存,我们可以使用文件。

目录

文件的分类

流和标准流

文件指针

文件打开和关闭

文件顺序读写

fputc

fgetc

文件的随机读写

fseek

ftell

rewind

文件读取结束的判定


 

文件的分类

     文件被分为程序文件数据文件两种。

     程序文件:源程序文件,可执行程序文件等。

     数据文件:存放数据的文件,程序运行时读写的数据。

数据文件又可以被分为两种二进制文件文本文件

  • 二进制文件:数据在内存中以二进制的形式存储,如果不加转换的输出到外存的文件件中。
  • 文本文件:以ASCII字符的形式存储的文件就是文本文件。

 

流和标准流

流(stream)

     主要用于输入输出操作,是程序与外部世界进行数据交换的通道或桥梁。“流”既可以是从源(如键盘、磁盘文件)向目标(例如屏幕、内存缓冲区等)流动的数据集合,也可以反过来表示。

标准流

    • stdin - 标准输入流,在大多数的环境中从键盘输入。

    • stdout - 标准输出流,大多数的环境中输出至显示器界面。

    • stderr - 标准错误流,大多数环境中输出到显示器界面。

     这三个流是默认打开的,我们使用scanf、printf等函数就可以直接进行输入输出操作的。

 

文件指针

     每个被使用的文件都在内存中开辟一个相应的文件信息区。用来存放文件的相关信息(如文件的名字,文件状态等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名 FILE

     例如,VS2013 编译环境提供的 stdio.h 头文件中有以下的文件类型申明:

86e41ae0a59d48ed92a68defa4176db8.png

     每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息。一般都是通过一个FILE的指针来维护这个FILE结构的变量。我们可以创建一个FILE*的变量。

4fd527b043df4fec8d6d3c3e974903a5.png

     通过pf即文件指针变量能够间接找到与它关联的文件

 

文件打开和关闭

     文件的打开和关闭是依靠fopen和fclose函数来实现的。

c4457f614013460cae3d7d3e8a8fce6c.jpg

  • filename:文件名。
  •  mode:文件的打开方式。
  •  stream:流。
  • fopen返回值:成功打开后返回此文件信息区的起始地址,打开失败则返回一个NULL。
  • fclose返回值:如果关闭成功就返回0值,否则返回EOF(-1)值。

   以下为几种文件打开方式:

     文本文件: 

5ee7876febdb48c8acadcaad89db9abd.png

     二进制文件:

4661c20c84e840ad80fae81831054c46.png

     注:当使用“w”,“wb”,“w+”,“wb+”打开文件时会清除文件原本存储的数据。

     举例:

904dbfcdeea242b3a104f17de9e11cdb.png

 

文件顺序读写

     以下为顺序读写函数:

9a2080a1736d405ba7e9853cc65f52ae.png

     我只介绍部分函数的用法,剩下的可以去https://cplusplus.com/上学习。

 

fputc

59a815023b7a4016b686d964c18bf5ca.png

  •  character:接收所要存入的字符的ASCII值。
  • stream:流(接收指向所要存入文件的指针)。

d30aa9791311466f9946fe604becfef5.png

 

fgetc

29edabb2b627409597d8c15cc6c86929.png

  • stream:流(接收指向所要读取文件的指针)。
  • 读取正常返回读取的ASCII码值,如果读取结束或失败返回EOF。

595a85dcd05a4463ac6572e3568aca78.png

 

文件的随机读写

     以下为随机读写函数:

ffce704ef64641f9a86354165dfc6397.png

     要事先存入一些数据,我存的是"abcdef"。

 

fseek

7d7b61e326ff44089c95acd71f7b20fc.png

  • offsrt:传入指针所要偏移的偏移量。
  • origin:设置传入的stream指针的起始位置(可传入3种模式)。       485e44acfcbb4fa19b06a6ebe3f1146b.png
  • 该函数运行成功返回零。否则回非零值。

     举例:     031ae03a2ef84c798cd660790355a9b1.png

5752fa11606b4a8aa023838baa830bf4.png

     文件指针的位置原来是在a的,向后移1位就到了b,利用fgetc得到b,文件指针的位置会自动移到c。

 

ftell

c4387ad132b5402bb6d193358dccc1b8.png

     举例:

322f830392a7434c99bb98dca67e1ccc.png

 

rewind

dfbbe15f084245c18bdbfb72df435b3c.png

     举例:

cc9c88f21b194cc1967f05fd001f5156.png

 

文件读取结束的判定

     以下为文件读取结束的判定函数:

2a1b0b2a25ee456489554f4807c7a1e4.png

 

  • 文本文件读取结束条件

        —判断返回值是否为EOF或NULL

        例:

             fgetc:判断返回值是否为EOF。
             fgets:判断返回值是否为NULL。

 

  • 二进制文件读取结束条件

        —判断返回值是否小于实际要读的个数

        例:

             fread:判断返回值是否小于实际要读的个数。

     要事先存入一些数据,我存的是"abcdef"。

6f0a9b8f4f704f3586aa6b65a8d121b4.png

  • 如果遇到文件末尾返回非0的数,否则返回0。

a9ffe372bd694c778d14950b9ad472c0.png

  • 如果文件读取发生错误返回非0的数,否则返回0。

举例:

67a530e5a2d948f8bd9493adb45220d3.png

     


     好了讲到这儿就差不多讲完了,希望你能有所收获。如果有错误的地方请及时指出,有什么不懂的地方可以私信我哈,如果觉得不错那就点点赞吧!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 23
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值