fread fwrite fseek 等总结

原创 2013年12月05日 22:49:13

最近使用fwrite ,fread等函数时对相应参数的理解不是很清楚,特此总结。


fopen(const char * path,const char * mode)

path:要打开文件的路径

mode:(mode部分来自百科的介绍)

r     以只读方式打开文件,该文件必须存在。
r+   以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个,允许读写数据。
rw+ 读写打开一个文本文件,允许读和写。
w    打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+  打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a     以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+   以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb   只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+  读写打开一个二进制文件。允许读或在文件末追加数据。
at+  打开一个叫string的文件,a表示append,就是说写入处理的时候是接着原来文件已有内容写入,不是从头写入覆盖掉,t表示打开文件的类型是文本文件,+号表示对文件既可以读也可以写。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库以二进制模式打开文件。如果不加b,表示默认加了t,即rt,wt,其中t表示以文本模式打开文件。


例:

fopen("./test.txt","rb+")

//以可读写方式打开一个二进制文件



fseek(FILE *stream, long offset, int mode)

stream: 文件指针

offset: 指针偏移量,注意单位是字节,相对于哪一位置的偏移量与mode的具体指定有关,详细看下面例子

mode: 指明从文件的某处开始 ,有三种形式 1.SEEK_SET(文件头,也可以用0表示)  2.SEEK_CUR(当前指针的位置,可用1表示)   3.SEEK_END(文件尾,可用2表示)


例:

fseek(input.txt,1L,SEEK_END); //将文件指针定位在距离文件尾一个字节处,即文件倒数第二个字节

fseek(input.txt,1L,2);  //与上面的完全一样



fwrite(const void * buffer,size,count,FILE *file)

buffer:对于fwrite来说,是即将要写入数据的地址,注意,file才是指向数据写入指定文件的指针

size:写入的每个数据项的字节数,以字节为单位

count:总的写入的数据项的个数

file:是指向数据写入指定文件的指针,即数据的接收文件(写入位置)的指针,注意与buffer区分


例:

fwrite(data,sizeof(char),sizeof(data),fp)

 //data 是之前定义的字符型数组,即char data[NUM]. 将data数组中存在的数据全部写入fp文件



fread(const void * buffer,size,count,FILE *file)

buffer:对于fread来说,是要读入数据的读入空间的地址,即接收数据的内存地址

size:读入的每个数据项的字节数,以字节为单位,与fwrite相似

count:总的读入的数据项的个数

file:输入流


例:

fread(data,sizeof(char),sizeof(data),fp)

//将fp中指定数量(data数组的大小)的数据读入数组data中



后面若遇到其他函数会进行更新。



转载请注明出处



C语言函数fread() , fwrite() ,fseek()用法分析

网上已经有不少关于c语言函数fread() 和fwrite() 用法分析的文章,在此将这两个函数的用法写下来,是为了巩固所学,加深印象,也为了日后方便查询复习比较,如果能帮助到某些朋友,则是意外的惊喜...
  • linpengbin
  • linpengbin
  • 2015年02月02日 15:55
  • 3744

c文件操作之fopen、fclose、fread、fwrite及相关fseek、ftell、rewind例子

在wchar.h中,可以看到 #ifndef _FILE_DEFINED   struct _iobuf {     char *_ptr;     int _cnt;     char...
  • u012270113
  • u012270113
  • 2014年05月26日 21:53
  • 2297

【转】一个问题引发的"血案" 之 文件的读写原理(fread, fwrite, fflush)

代码很简单: 以rb+形式打开一个已存在的文件(文件内容是abcdefghijklmnopqrstuvwxyz ),然后随便读几个字节,然后直接调fwrite,返回值是正确的,但是fclose后,...
  • ghgui008
  • ghgui008
  • 2014年03月27日 00:57
  • 2422

Linux下文件的相关操作(fopen、fwrite、fread、fseek、ftell)

1、FILE *fopen(char *path,*mode); mode: r:  读打开, 不创建 w: 写打开,创建/清空 a: 写打开, 创建/追加 r+: 读/写打开,不创建 w+:读...
  • wj8987922
  • wj8987922
  • 2016年08月16日 11:14
  • 3003

FILE文件流的中fopen、fread、fseek、fclose的使用

FILE文件流用于对文件的快速操作,主要的操作函数有fopen、fseek、fread、fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满...
  • zhengshifeng123
  • zhengshifeng123
  • 2016年08月05日 15:51
  • 1001

fread的第二个参数和第三个参数可以互换吗---为什么fread容易返回0 ?

我们先来看看fread函数的原型:
  • stpeace
  • stpeace
  • 2014年08月13日 20:20
  • 2279

Qt与C文件操作的差异

在使用Qt的QDataStream类进行文件的二进制处理时发现与c语言的标准IO有差异,下面用代码说明。 #include #include #include #include ...
  • caploveleo
  • caploveleo
  • 2013年06月21日 21:06
  • 1016

fwrite和fread函数的用法小结

fwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出。 #include size_t fread(void *ptr, size_t si...
  • Sky_qing
  • Sky_qing
  • 2013年10月16日 16:55
  • 104427

c++文件读写之fread和fwrite

fwrite和fread基本语法二进制文件和文本文件的区别先贴出之前看到的一篇博文:http://www.cnblogs.com/zhangjiankun/archive/2011/11/27/226...
  • shansusu
  • shansusu
  • 2015年03月31日 16:05
  • 5407

linux c之用fwrite和fread实现文件的复制

1、题目       用fwrite和fread函数实现文件的复制 2、函数解释      #include size_t fread(void *ptr, size_t size, size_t ...
  • u011068702
  • u011068702
  • 2017年01月11日 15:29
  • 2776
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:fread fwrite fseek 等总结
举报原因:
原因补充:

(最多只允许输入30个字)