基于C的流式文件操作 FILE

基于C的流式文件操作

这种文件操作有一个重要的结构 FILE ,FILE这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行。接下来介绍这种操作的一些常用函数。

fopen()
fopen的原型是:FILE *fopen(const char *filename,const char *mode)
参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下表:

mode字符串含义
r打开只读文件,该文件必须存在。
r+打开可读写的文件,该文件必须存在。
w打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件
w+打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
wb+读写打开或建立一个二进制文件,允许读和写。
wt+读写打开或着建立一个文本文件;允许读写。
a以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
at+读写打开一个文本文件,允许读或在文本末追加数据。
ab+读写打开一个二进制文件,允许读或在文件末追加数据。

fopen()函数返回一个FILE指针,所以申明一个FILE指针后不用初始化,而是用fopen()来返回一个指针并与一个特定的文件相连,如果成败,返回NULL。
使用示例:

FILE *fp;
fp = fopen(filePathTmp.c_str(), "w");

fclose()
fclose()的功能就是关闭用fopen()打开的文件,其原型是:int fclose(FILE *fp);如果成功,返回0,失败返回EOF。在程序结束时一定要记得关闭打开的文件,而且fclose的关闭与fopen的打开要尽量在同一片作用域。
使用示例:

FILE *fp;
fp = fopen(filePathTmp.c_str(), "w");
fclose(fp);

fwrite()
fwrite() 是一个文件处理函数,功能是向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目。
函数原型 size_t fwrite(const void * buffer, size_t size, size_t count, FILE fp);
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)参数 size 是指单个元素的大小(其单位是字节而不是位,例如,读取一个 int 型数据就是 4 字节)
(3)参数 count 指出要读或写的元素个数,这些元素在 buf 所指的内存空间中连续存放,共占“size
count”个字节
(4)fp:目标文件指针;
(5)返回实际写入的数据项个数count。 成功时返回的记录数等于 count 参数,出错或读到文件末尾时返回的记录数小于 count,也可能返回 0。
使用举例:

        FILE *fp;
		fp = fopen(filePathTmp.c_str(), "w");
		int64_t length = fwrite(cstr, sizeof(char), count, fp);

需要注意的是:
如果返回值等于预期的count,则说明文件写入正确且全部写入。
如果这个返回值等于零,则写入过程发生错误。
这个返回值可能小于预期count。要用ferror()函数判断是否发生错误,发生错误则抛出异常。未发生错误则要继续将未写入的内容循环写入。

ferror()
ferror()函数 : ferror() 函数的声明 int ferror(FILE *fp)
ferror()函数也有返回值,如果发生错误,返回非零值,未发生错误,则返回0。

使用举例:

if( ferror(fp) )
   {
      printf("发生错误\n");
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值