C语言文件读写函数

1、字符读写

字符读写函数包括fputc和fgetc两个函数,它们主要用于文本文件的读写。

fputc函数的原型如下:

int fputc( int c, FILE *fp );

其中,c是要写入字符,它虽被定义为整型,但只使用最低为的一字节,fp是文件指针。fputc的功能是,将字符c输出至fp所指向的文件。如果成功,位置指针自动后 移1字节的位置,并且返回c;否则返回EOF。

 

fgetc函数的原型如下:

int fgetc( FILE *fp );

        其中fp为文件指针。fgetc的功能是,从fp所指向的文件中读取一个字符,如果成功则返回读取的字符,位置指针自动后移1字节的位置;否则返回EOF。

③feof函数的原型如下:

int feof( FILE *fp );

        该函数 的作用是,当位置指针指向文件fp的末尾时,返回一个非0值,否则返回0。

2、文件串读写

文件串读写函数包括fputs和fgets两个函数,它们主要用于文本文件的读写。

fputs函数的原型如下:

int fputs( const char *s, FILE *fp );

       其中,s是要写入的字符串,fp是文件指针。fputs的功能:将字符串s输出至fp所指向的文件(不含'\0')。如果成功,位置指针自动后移,函数返回一个非负整数;否则返回EOF。

 

fgets函数的原型如下:

char *fgets( char *s, int n, FILE *fp );

        其中,s指向待赋值字符串的首地址,n是控制读取个数的参数,fp为文件指针。 fgets的功能:从位置指针开始读取 一行或n-1个字符,并存入s,存储时自动在字符串结尾加上'\0'。如果函数执行成功,位置指针自动后移,并返回s的值,否则返回NULL。

 

3、格式化读写

格式化读写函数包括fprintf和fscanf两个函数,它们只要用于文本文件的读写。

fprintf函数的原型如下:

int fprintf( FILE *fp, const char* format, 输出参数1, 输出参数2… );

        其中,fp是文件指针,format为格式控制字符串,输出参数列表为待输出的数据。 fprintf的功能是根据指定的格式(format参数)发送数据(输出参数)到文件fp。

例:

fprintf( stdout, "%d%.2f",st.ID,st.score );

注:stdout就是默认的对影显示器的文件指针,stdin就是默认的对应键盘的文件指针。

注意:fprintf() : 按格式输入到流,其原型是int fprintf(FILE *stream, const char*format[, argument,...]);其用法和printf()相同,不过不是写到控制台,而是写到流罢了。注意的是返回值为此次操作写入到文件的字节数。如int c =fprintf(fp, "%s %s %d %f", str1,str2, a, b) ;str1:10字节;str2:10字节;a:2字节;b:8字节,c为33,因为写入时不同的数据间自动加入一个空格。

fscanf函数的原型如下:

int fscanf( FILE *fp,  const char* format, 地址1,地址2… );

        其中,fp是文件指针,format为格式控制字符串,地址列表为输入数据的存放地址。 fscanf的功能是根据指定的格式(format参数)从文件fp中读取数据至内存(地址)。

例:

fscanf( fp, "%d%lf",&st.ID, &st.score );

4、块数据读写

块数据读写函数包括fwrite和fread两个函数,它们主要用于二进制文件的读写。

fwrite函数的原型如下:

int fwrite( const void *buffer, int size, int n,FILE *fp );

        其中,buffer表示要输出数据的首地址,size为数据块的字节数,n为数据块的个数,fp是文件指针。fwrite的功能:从内存中的buffer地址开始,将连续n*size字节的内容写入fp文件中。该函数的返回值是实际写入的数据块个数。

例:

struct Student st[3] ={{1001,"Tom",74},{1002,"Jack",83},{1003,"Lisa",66}};

fwrite( st, sizeof(st), 1, fp);

//等于 fwrite( st, sizeof(struct Student), 3, fp );

 

fread函数的原型如下:

int fread( void *buffer, int size, FILE *fp );

        其中,buffer表示要输入数据的首地址,size为数据块的字节数,n为数据块的个数,fp是文件指针。fread的功能:从文件fp中,连续读取n*size字节的内容,并存入buffer指向的内存空间。该函数的返回值是实际读入的数据块个数。

例:

fread( &st, sizeof(st), 1, fp );

注意:

1 完成次写操(fwrite())作后必须关闭流(fclose());

2 完成一次读操作(fread())后,如果没有关闭流(fclose()),则指针(FILE *fp)自动向后移动前一次读写的长度,不关闭流继续下一次读操作则接着上次的输出继续输出;

 

注:fputc fwrite函数都是全部将内容中的二进制数据按字节写出到文件中;而 fprintf则将二进制转换成ASCII输出到文件中。

fscanf将读取的ascii码转换成二进制放到内存中,效率略低;fgetc fputc 都是按照字节存取,无论文本模式还是二进制模式打开,都按照一个一个字节读取,不存在\r\n问题。


猜你喜欢

转载自blog.csdn.net/bobyuan888/article/details/80153283