C语言中的文件I/O函数有哪些?

本文主要对操作文件所用到的函数做一个比较详细的总结和分析,大体罗列了所有关于文件的相关函数。

fopen()函数

FILE * fp;
fp=fopen("test.txt","w");
模式字符串含义
“r”以读模式打开文件
“w”以写模式打开文件,把现有文件长度截为0,如果文件不存在,则创建一个新文件
“a”以写模式打开文件,在现有文件末尾添加内容,如果文件不存在,则创建一个新文件
“r+”以更新模式打开文件(可读可写)
“w+”以更新模式打开文件(可读可写),把现有文件长度截为0,如果文件不存在,则创建一个新文件
“a+”以更新模式打开文件(可读可写),在现有文件末尾添加内容如果文件不存在,则创建一个新文件
“rb”、“wb”…与上一个模式类似,但是是以二进制模式打开文件
“wx”、”w+x“C11新增的带X的写模式,不会截断源文件,具有独占特性其他程序或线程无法访问被打开的文件

fclose()函数

FILE * fp;
fclose(fp);

fclose()函数关闭fp指定的文件,必要时刷新缓冲区。

指向标准文件的指针

标准文件文件指针通常使用的设备
标准输入stdin键盘
标准输出stdout显示器
标准错误stderr显示器

getc()和putc()

getc()个putc()函数与getchar()和putchar()函数类似。都是输入/输出一个字符。所不同的是要函数getc()和putc()要使用哪一个文件。而getchar()和putchar()默认的文件是stdin和stdout.

ch=getc(fp); ch=getchar();

putc(ch,fp); ch=putchar();

实际上,putchar()函数一般通过putc()函数来定义,getchar()函数通过getc()函数来定义。所以getc()和putc()在功能上更加的万能吧。

fprintf()函数

fprintf()函数的用法和printf()函数的用法一样,区别在于前者需要使用用第一个参数来指定待处理的文件。通常用来存储出错的文件名。

  fprintf(stderr,%s”,filename);

fscanf()函数

fscanf()函数的用法和scanf()函数的用法一样,区别在于前者同样需要使用第一个参数来指定待处理的文件。可以从指定的文件读取数据,缺点是只能读取一个字符串。

   fscanf(fp,%s”,ch);

rewind()函数

rewind()函数可以让程序回到文件的开始处。

二进制IO:fread()函数和fwrite()函数

之前用到的标准IO函数都是面向文本的,用于处理字符串和字符。如何在文件中保存数值数据呢?对于标准IO,fread()和fwrite()函数用于二进制形式处理数据。

fwrite()函数的原型如下:

size_t fwrite(const void * restrict ptr,size_t size,size_t number,FILE * restrict fp);

fwrite()函数把二进制数据写入文件。size_t 是根据标准C类型定义的类型,他是sizeof运算符返回的类型,通常是unsigned int.

fwrite()函数返回成功写入项的数量。正常情况下,该返回值就是number,但是如果出现写入错误,返回值就会比number小

fread()函数的原型如下:

size_t fwrite(const void * restrict ptr,size_t size,size_t number,FILE * restrict fp);

fread()函数返回成功读取项的数量。正常情况下,该返回值就是number,但是如果出现读取错误或者读到文件结尾,返回值就会比number小

随机访问:fseek()和ftell()函数

有了fseek()便可以把文件看做是数组,在fopen()打开的文件中直接移动到任意字节处。

fseek()函数有3个参数,返回int类型的值。正常返回0,失败返回-1;

ftell()函数返回一个long类型的值。他返回参数指向文件的当前位置距离文件开始处的字节数。文件的第一个字节距离文件的开始处距离为0;

模式偏移量的起始点
SEEK_SET文件开始处
SEEK_CUR当前位置
SEEK_END文件末尾

例如:

//fseek()函数的例子

fseek(fp,0L,SEEK_SET);

fseek(fp,10L,SEEK_SET);

fseek(fp,-10L,SEEK_SET);//-10L表示后退

fseek(fp,0L,SEEK_CUR);

//ftell()函数的例子

ftell(fp)

int feof(FILE *fp) 和 int ferror(FILE *fp)函数

如果标准输入函数返回EOF,则通常表明函数已经到达文件结尾。然而,出现读取出错误时,函数也会返回EOF.feof()和ferror()函数就是用于区分这俩种情况。当上一次输入调用检测到文件结尾时,feof()函数返回一个非零值,否则返回0.当读或写出现错误时,ferror函数返回一个非零值,否则返回0

总结
如果要在不损失精度的前提下保存或回复数据,请使用二进制模式以及fread()和fwrite()函数。如果打算保存文本信息并创建能在普通文本编辑器可以查看的的文本,请使用文本模式以及文本函数(getc,fgets,fscanf).;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值