常用的几种文件操作函数

fopen

函数原型:FILE *fopen(const char *filename, const char *mode);

返回FILE*,这个返回值可以理解为,指向打开文件的一个指针,通过它可以找到该文件并进行操作;形参const char* filename,以当前路径,输入你要打开的文件路径及名称;形参const char* mode输入你要赋予操作该文件的权限类型

const char* mode的常用类型:

举例:

FILE* fp = fopen("./test.txt","w");打开一个当前路径下test.txt的文件,赋予写入权限(如果没有文件就创建),fp就是指向该文件的指针,其他文件操作函数形参为FILE*类型的地方基本都是传入fp

一般需要判断是否打开成功,如果未成功打开,return结束程序,以免后续对文件的操作产生错误

fclose

函数原型:int fclose( FILE *fp );

返回值类型为int,如果流fp成功关闭,fclose 返回 0,否则返回EOF(-1),形参FILE* fp为需要关闭的文件,关闭后需要fp =NULL;赋空(与动态内存函数free()类似)

fwrite

函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

返回值size_t(无符号long),返回写入的数据量(多少个size_t size);形参const void* ptr,指向你要写入文件的内容的区域(例:创建一个数组并赋值,数组地址作为该形参传入,写入文件的就是该数组的数据);size_t size指你要写入的一个数据大小/byte字节,size_t numemb指你要写入多少个该类型数据;FILE* stream就是上面说过的指向文件的"指针"FILE* fp,标准说法是流

举例:

FILE* fp = fopen("./test.txt","w");

int a[5] = {1,2,3,4,5};

size_t size = fwrite(a,sizeof(int),5,fp);当前路径下打开一个test.txt文件,创建一个int数组a,将a的内容写入进fp指向的test.txt文件当中

fread

函数原型:size_t fread( void *buffer, size_t size, size_t count, FILE *stream );

返回值size_t返回实际读取的元素个数;形参void* buffer指接收读取数据的指针指向区域,size_t size指每个读取的元素所占字节数;size_t count指要读取的元素个数;FILE* stream指要读取的文件指针

举例:

FILE* fp = fopen("./test.txt","r");

int a[5] ;

size_t size = fread(a,sizeof(int),5,fp);将当前路径下的test.txt文件的前5个int类型读取到数组a中

fseek、ftell、rewind            

函数原型:long ftell(FILE* stream);          获取当前文件指针所在的位置

函数原型:void rewind(FILE* stream);     将文件指针移动带文件开头

着重讲一下fseek函数,因为多了一个基准位置参数

函数原型:int fseek(FILE* stream,long offset,int whence);

返回值int,成功,返回0,失败返回非0值,并设置error的值,可以用perror()函数输出错误

形参FILE* stream指要操作的文件,long offset指文件指针要移动的距离(偏移量/byte字节),int whence指文件指针从哪个位置开始移动 long offset距离,这个地方有3个固定参数:

SEEK_SET      把文件头作为基准位置开始移动

SEEK_CUR     把当前文件指针位置作为基准位置开始移动

SEEK_END     把文件尾作为基准位置开始移动

如果long offset传正数,就往后移动,传负数就向前移动;这些函数主要就是改变读、写文件的位置

举例:

FILE* fp = fopen("./test.txt","w+");

fseek(fp,4,SEEK_SET);             读写位置从文件头向后移动4个字节

fseek(fp,4,SEEK_CUR);            读写位置从当前文件指针位置向后移动4个字节

fseek(fp,-4,SEEK_END);           读写位置从文件尾向前移动4个字节

fprintf、fscanf

函数原型:int fprintf (FILE* stream, const char*format, [argument]);

返回值一般不关注,FILE* stream指要操作的文件指针,const char* format与printf函数的第一个形参相同,[argument]与printf函数的第二个形参相同

函数原型:int fscanf(FILE *stream, char *format,[argument...]);

返回值一般不关注,FILE* stream指要操作的文件指针,const char* format与scanf函数的第一个形参相同,[argument]与scanf函数的第二个形参相同

这两个函数效率太低,不适合处理大数据量的文件

stdin、stdout、stderr

标准输入       stdin          键盘

标准输出       stdout        终端窗口

标准错误       stderr         终端窗口

举例:

int a = 100;

printf("%d\n",a);           等价于fprintf(stout,"%d\n",a);

scanf("%d",&a);           等价于fscanf(stdin,"%d",&a);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值