C语言文件操作——开、关、读、写

概述

1.一个C文件是一个字节流或二进制流,它把数据看作是一连串的字符(字节),而不考虑记录的界限。在C语言中对文件的存取是以字符(字节)为单位的
(注:流式文件 —— 输出时不会自动增加回车换行符以作为记录结束的标志,输入时不以回车换行符作为记录的间隔)

2.ANSI C标准使用缓冲文件系统处理文本文件和二进制文件。每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息,这些信息是保存在一个结构体变量中的,该结构体类型是由系统定义的,取名为 FILE

打开和关闭文件

读写之前打开文件,使用完毕后关闭文件

fopen函数

1.函数原型:FILE *fopen(const char *filename,const char *mode)
2.调用方式:

FILE *fp;
fp=fopen(文件名,打开方式);

3.若打开成功:返回一个指向FILE类型结构体变量的指针
若打开出错:返回一个空指针值NULL(NULL在stdio.h文件中被定义为0)
建议用以下方法打开一个文件:

FILE *fp;
if((fp=fopen("myFile","mode"))==NULL)
{
	printf("Open Error");
}

4.fopen函数原型中的mode是打开文件的方式,具体如下表:
在这里插入图片描述
5.向计算机输入文本文件时,计算机将回车换行符转换为一个换行符,在输出时把换行符转换成为回车和换行两个字符。而在用二进制文件时,不进行这种转换,在内存中的数据形式与输出到外部文件的数据形式完全一致
6.在程序开始运行时,系统自动打开三个标准文件:标准输入、标准输出、标准出错输出。通常这三个文件始终与终端相连,因此我们所用到的从终端输入或输出都不需要打开终端文件。系统自动定义了3个指针文件:stdin,stdout,stderr,分别指向终端输入、终端输出、标准出错输出(从终端输出)。如果程序指定要从stdin所指的文件输入数据,就是指从终端键盘输入数据。

fclose函数

1.函数原型:int fclose(FILE *fp)
2.调用形式:

fclose(fp);

2.若执行了关闭操作则返回0,否则返回EOF(-1)。【注】EOF不是可输出字符

读写文件
fread函数和fwrite函数

作用:fread和fwrite函数一般用于二进制文件的输入输出,因为它们是按照数据块的长度来处理输入输出的,在字符发生转换的情况下结果可能会与设想的有偏差。

1.函数原型:

size_t __cdecl fread(void * __restrict__ _DstBuf,size_t _ElementSize,size_t _Count,FILE * __restrict__ _File);
size_t __cdecl fwrite(const void * __restrict__ _Str,size_t _Size,size_t _Count,FILE * __restrict__ _File);

2.调用形式:

fread(文件中的数据被读出后的存放地址,读出一项的字节数,读出几项,文件指针);
fwrite(将要写入文件的数据的存放地址,写入一项占的字节数,写入几项,文件指针);

3.若fread或fwrite调用成功,则函数返回值为读出或写入的项数
例子:

FILE *fp_w,*fp_r;
int s[size]={0};
if((fp_w=fopen("myFile","wb"))==NULL)     //利用返回值判断是否成功执行
{
	printf("OPEN ERROR");
}
for(int i=0;i<size;i++)
{
	if(fwrite(&s[i],sizeof(int),1,fp)!=1)  //利用返回值判断是否成功执行
	{
		printf("WRITE ERROR");
	}
}
fclose(fp_w);
if((fp_r=fopen("myFile","rb"))==NULL)
{
	printf("OPEN ERROR");
}
for(int i=0;i<size;i++)
{
	if(fread(&s[i],sizeof(int),1,fp)!=1)
	{
		printf("READ ERROR");
	}
}
fclose(fp_r);
fprintf函数和fscanf函数

作用:fprintf函数和fscanf函数是格式化读写函数,和printf,scanf作用相仿,只是前者读写对象是磁盘文件,后者是终端。
1.函数原型:

int __cdecl fscanf(FILE * __restrict__ _File,const char * __restrict__ _Format,...);
int __cdecl fprintf(FILE * __restrict__ _File,const char * __restrict__ _Format,...);

2.调用形式:

fscanf(文件指针,格式字符串,输入列表);  //从文件按格式读出

按照规定格式将磁盘文件上的数据送给输入列表中对应的变量。

fprintf(文件指针,格式字符串,输出列表);   //按格式写入文件

将输出列表中变量的值按照格式字符串规定的格式输出到fp指向的文件上。

3.fscanf若正常执行,返回的是从文件实际读取的变量个数,出错或者到结尾返回EOF
fprintf若正常执行,会返回写入文件的字节数,否则返回负数
【注】在磁盘与内存频繁交换数据的情况下,尽量不使用fprintf和fscanf.

fgets函数和fputs函数

作用:fgets用于从指定文件读入一个字符串,fputs用于向指定文件输出一个字符串

fgets(str,n,fp);//从fp指向的文件输入n-1个字符,然后在最后加一个'\0'字符,然后后存至字符数组str,最后返回str首地址
futs(str,fp);//将字符串输出到fp指向的文件,输出成功返回0,失败返回EOF
fputc函数和fgetc函数

作用:fputc函数用于把一个字符写到磁盘文件,fgetc函数用于从指定文件读入一个字符

fputc(ch,fp);//若输出成功,返回ch,否则返回EOF(-1)
ch=fgetc(fp);//若遇到文件结束符,返回EOF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值