读/写一个字符串──fgets()和fputs()
int fputs(字符串,文件指针);
②功能:向指定文件输出一个字符串,并将读写位置指针向前移动length(串长)个字节。
如果输出成功,则函数返回值为0;否则,为非0值。
char *fgets( 指针,串长+1,文件指针 );
②功能:从指定文件中读入一个字符串,存入“字符数组/指针”中,并在尾端自动加一个结束标志'\0';同时,将读写位置指针向前移动length(串长)个字节。
注:如果在读入规定长度之前,遇到文件尾EOF或换行符,读入即结束。
读/写一个数据块──fread()和fwrite()
1.读1个数据块——fread( )
int fread(void *buffer,int size,int count,FILE *fp);
从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer(起始地址)开始的内存中;同时,将读写位置指针向前移动size* count个字节。
2 .写1个数据块——fwrite ()
int fwrite( void *buffer,int size,int count,FILE *fp);
从buffer开始,一次输出size个字节,重复count次,并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动size* count个字节。
如果调用fread()或fwrite()成功,则函数返回值等于count。
fread()和fwrite()函数,一般用于二进制文件。
格式化读/写──fscanf()和fprintf()函数
与scanf()和printf() 功能相似,区别在于:操作对象不同:
◆scanf()和printf():标准输入(stdin)输出(stdout)文件。
◆ fscanf()和fprintf():指定文件。
int fscanf(文件指针,"格式符",输入变量首地址表);
int fprintf(文件指针,"格式符",输出表达式表);
读/写函数的选用原则
从功能角度来说,fread()和fwrite()函数可以完成对文件的任何操作。为方便起见,依下列原则选用:
1.读/写1个字符(或字节) :选用fgetc()和fputc() 。
2.读/写1个字符串:选用fgets()和fputs()。
3.读/写1个(或多个)不含格式的数据:选用fread()和fwrite()。
4.读/写1个(或多个)含格式的数据:选用fscanf()和fprintf()。
位置指针复位函数rewind()
1.用法:int rewind( 文件指针 ) ;
2.功能:使文件的位置指针返回到文件头
随机读写与fseek()函数
对于流式文件,既可以顺序读写,也可随机读写,关键在于控制文件的位置指针。
◆顺序读写:读写完当前数据后,系统自动将文件的位置指针,移动到下一个读写位置上。
◆随机读写:读写完当前数据后,通过fseek()函数,将位置指针移动到文件中的任何一个地方。
1.用法:int fseek(文件指针,位移量,参照点 );
2.功能:将指定文件的位置指针,从参照点开始,移动指定的位移量。
(1)参照点:用0(文件头)、1(当前位置)和2(文件尾)表示。
在ANSI C标准中,还规定如下符号常量:
SEEK_SET──文件头,
SEEK_CUR──当前位置,
SEEK_END──文件尾
(2)位移量:以参照点为起点,向前(位移量>0)或后(位移量<0)移动的字节数。
在ANSI C标准中,要求位移量为long int数据。
假设文件的当前位置指针指向50(从0开始编号),则:
◆fseek(fp, 10, 0):将位置指针移动到10;
◆fseek(fp, 10, 1):将位置指针移动到60。
实际应用建议:最好使用文件头作为参照点。
返回文件当前位置的函数ftell()
文件的位置指针可任意移动,也经常移动,往往容易迷失当前位置,ftell()就可以解决这个问题。
1.用法:long ftell( 文件指针 ) ;
2.功能:返回文件位置指针的当前位置(用相对于文件头的位移量表示)。
如果返回值为-1L,则表明调用出错。
例如: offset = ftell( fp );
if( offset = = -1L ) printf(“ftell() error\n”);