本来要写文本通讯录的,但是发现好多函数都忘记了,就查了些并记录下来,希望对你有用。本来顺手准备手动笔芯的,发现太娘了,就不写了。
首先,要了解文件输入输出,我们要知道什么是流?
可以想象水从水管里出来,这就是一股水流。就C程序而言,所有的I/O操作就是简单的从程序移进、移出字节的事情,因此这种字节流被称为流 。
流被分为两种: 文本流和二进制流 。
相较于gets,puts函数,fgets和fputs函数指明了文件源和目标,是格式化函数
char * gets ( char * str );
int puts ( const char * str );
char * fgets ( char * str, int num, FILE * stream );
int fputs ( const char * str, FILE * stream );
在C程序中读写文件,必须有FILE*类型的文件(指针),FILE*是文件的句柄。
打开流:函数原型:FILE * fopen ( const char * path, const char * mode );
函数参数:path:要打开文件的路径,mode:打开的模式,返回值:调用成功时返回 文件流指针,调用失败时返回 NULL
mode参数可以是以下参数中的一个:
r:只读模式;要求文件必须存在
w:只写模式;文件存在则将文件内容清零,文件不存在则创建
r+:读写模式;要求文件必须存在
w+:读写模式;文件存在则将文件内容清零,文件不存在则创建
a:追加只写模式;文件不存在则创建,文件存在内容也不清零
a+:追加读写模式;文件不存在则创建,文件存在内容也不清零关闭流:函数原型:int fclose( FILE *fp );
功能是关闭一个流,要和fopen配套使用哦。
fseek的用途:控制件指针偏移。
函数原型:int fseek(FILE *stream, long offset, int fromwhere)
参数1是文件流指针,参数2是偏移量大小,参数3是偏移模式,通常为:SEEK_CUR(文件当前位置) SEEK_SET(文件开头) SEEK_END(文件结尾)
rewind:是将文件内部的指针重新指向一个流的开头
long ftell(FILE * stream);函数 ftell 用于得到文件位置指针当前位置相对于文件首的偏移字节数。
fread:它从文件流中读数据,最多读取count个项,每个项size个字节。
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream)
1. buffer:用于接收数据的内存地址
2. size:要读的每个数据项的字节数,单位是字节
3. count:要读count个数据项,每个数据项size个字节.
4. stream:输入流
5. 如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。
fwrite:向指定的文件中写入若干数据块
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:写入的目标文件指针;
(5)返回实际写入的数据项个数count。
feof是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0,文件结束符只能被clearerr()清除。
注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。