fread fwrite fseek 等总结

来源:互联网 发布:qq空间域名申请 编辑:程序博客网 时间:2024/05/18 18:47

最近使用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中



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



转载请注明出处