c语言文件操作函数详解汇总

C语言文件操作函数详解
注:以下文章为个人学习笔记总结,任何不理解可以随时问我。

C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现。文件操作标准库函数有:

文件的打开

fopen():打开文件

FILE *fopen( const char *filename, const char *mode );

文件的关闭

fclose():关闭文件

int fclose( FILE *stream );

文件的读写

fgetc():读取一个字符

int fgetc( FILE *stream );

fputc():写入一个字符

int fputc( int ch, FILE *stream );

fgets():读取一个字符串

char *fgets( char *str, int count, FILE *stream );

fputs():写入一个字符串

int fputs( const char *str, FILE *stream );

fprintf():写入格式化数据

int fprintf( FILE *stream, const char *format, ... );

fscanf():格式化读取数据

int fscanf( FILE *stream, const char *format, ... );

fread():读取数据

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

fwrite():写入数据

int fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

文件状态检查

feof():文件是否结束

int feof ( FILE * stream )

ferror():文件读/写是否出错

int ferror ( FILE * stream );

clearerr():清除文件错误标志

void clearerr ( FILE * stream )

ftell():文件指针的当前位置

long int ftell ( FILE * stream );

文件指针定位

rewind():把文件指针移到开始处

void rewind ( FILE * stream );

fseek():重定位文件指针

int fseek ( FILE * stream, long int offset, int origin );

以上代码块均来自https://cplusplus.com可以自查

参数解释:

“r”:以只读的形式打开文本文件(不存在则出错)

“w”:以只写的形式打开文本文件(若不存在则新建,反之,则从文件起始位置写,覆盖原内容)

“a”:以追加的形式打开文本文件(若不存在,则新建;反之,在原文件后追加)

“r+”:以读写的形式打开文本文件(读时,从头开始;写时,新数据只覆盖所占的空间)

“wb”:以只写的形式打开二进制文件

“rb”:以只读的形式打开二进制文件

“ab”:以追加的形式打开一个二进制文件

“rb+”:以读写的形式打开二进制文件。

“w+”:首先建立一个新文件,进行写操作,然后从头开始读(若文件存在,原内容将全部消失)

“a+”:功能与”a”相同。只是在文件尾部追加数据后,可以从头开始读

“wb+”:功能与”w+”相同。只是在读写时,可以由位置函数设置读和写的起始位置

“ab+”:功能与”a+”相同。只是在文件尾部追加数据之后,可以由位置函数设置开始读的起始位置

接下来介绍部分常见的文件操作。

1、打开文件

利用fopen( )打开文件,函数如下:

FILE *fopen( constchar *filename, constchar *mode );

第一个参数:该参数为字符串类型,表示要打开的文件的名称

第二个参数:该参数为字符串类型,表示打开模式(只读、只写、更新、追加)

fopen( )函数会为要打开的文件创建流并返回一个指向文件对象的FILE*型指针。

2、关闭文件

利用fclose( )打开文件,函数如下:

intfclose( FILE *stream );

输入参数:要关闭的文件的指针

返回值:成功关闭返回0,否则返回EOF

结果如下:

成功打开文件

成功关闭文件

3、从文件中读取数据

利用fscanf( )从文件中读取数据,函数如下:

intfscanf( FILE *stream, constchar *format, ... );

与scanf( )函数比起来,fscanf( )函数多了一个输入参数即FILE *stream;它表示从哪个文件读取数据。除此以外,它与scanf( )函数完全相同。例如,要从fp中读取十进制整数值并保存是x,代码如下:

fscanf(fp,"%d",&x);

4、向文件中写入数据

利用fprintf( )向文件中写入数据,函数如下:

intfprintf( FILE *stream, constchar *format, ... );

fprintf( )函数的使用也很简单,与printf( )函数比起来它多了一个输入参数即FILE *stream;它表示向哪个文件写入数据。除此以外,它与printf( )函数完全相同。例如,要向fp中写入十进制整数值,代码如下:

fprint(fp,"%d",x);

6、fgetc( )和fputc( )

之前我们利用putchar( )和getchar( )将键盘输入的文字显示到控制台

代码如下:

#include#includeintmain(){    int ch;    while((ch=getchar())!=EOF){        putchar(ch);    }    return0;}

在该示例中是从键盘读入数据,输出到控制台。

在此,介绍两个非常类似的函数。

首先来看fgetc( ):

intfgetc( FILE *stream );

该函数用于从文件中读取一个字符并将其转为int型作为函数的返回值。

接着来看fputc( ):

intfputc( int ch, FILE *stream );

该函数用于向文件中写入一个字符。

7、fgets( )和fputs( )

与fgetc( )和fputc( )类似,可采用fgets( )和fputs( )从文件中读出或者写入字符串。

先来看fputs( ):

intfputs( constchar *str, FILE *stream );

将str指向的字符串写入stream指向的文件流,成功返回非负数;反之EOF。请注意:该函数输入完成后不会增加额外的特殊字符(如换行符等)

示例如下:

#include#includeintmain(){    FILE *fp = fopen("D:\\test.txt", "w");    fputs("hello c programming\n", fp);    fputs("hello c++ programming\n", fp);    fclose(fp);    puts("已将字符串写入文件");    return0;}

结果如下:

已将字符串写入文件

再来看fgets( ):

char *fgets( char *str, int count, FILE *stream );

该函数从文件指针stream指向的文件内读取字符串并保存到指针str所指向的内存空间中,直至已读size-1个字符或出现换行符或文件末尾时为止;当读取错误或者读到文件末尾EOF返回NULL。请注意:该函数会读取最后的换行符’\n’

8、fread( )和fwrite( )

虽然可使用函数 fprintf ( )和 fscanf( ) 从磁盘文件中读写任何类型的文件,但是效率并不高。所以,我们可采用fread( )和fwrite( )按照二进制的形式对文件进行读写操作。

原型如下:

size_tfread( void *buffer, size_t size, size_t count, FILE *stream );

intfwrite( constvoid *buffer, size_t size, size_t count, FILE *stream );

两个函数输入参数的个数和类型一致,概述如下:

第一个参数:指向读写数据首地址的指针。

第二个参数:要操作的单个数据的大小。例如,int型数据的大小就是sizeof(int)

第三个参数:数据个数

第四个参数:文件指针

你可能感兴趣的:(校园学习,c语言)