栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言文件操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言文件操作

文章目录
  • 文件操作
  • 1.文件型指针变量
  • 2.文件的打开
  • 3.文件的关闭
  • 4.文件的读写
    • 字符读写函数:
    • 字符串读写函数:
    • 数据块读写函数:
    • 格式化读写函数:
    • 顺序读写和随机读写:
    • ftell函数
    • ferror函数
    • clearerr函数


文件操作

C语言的文件操作相关内容


1.文件型指针变量
	FILE *fp;

其中fp是一个指向FILE类型结构体的指针变量,结构的具体定义为

typedef struct _iobuf
{
	void* _Placeholder;
} FILE;

一般来说,可以通过fp指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。当有多个文件的时候,可以设置多个指针变量,分别指向到各个文件,以实现对文件的访问;
可以使用FILE类型的数组:

FILE file[5];	//定义一个结构体数组,有5个元素,可以用来存放5个文件的相关信息
2.文件的打开
FILE *fp;
fp = fopen(文件名,使用文件方式); // 文件使用方式:只读(“r”),只写(“w”)

其中需要注意的是:
“r”打开一个文件时,该文件必须已经存在,只读;
“w”打开一个文件时,若文件不存在,则以指定文件名建立该文件,若文件已存在,则将该文件删除,重建一个文件;
“a”向一个已存在的文件追加新的信息;

另外,打开一个文件时,如果出错,fopen将返回一个空指针NULL,可以用这一个信息来判断是否完成打开文件的动作,并进一步做相应的处理。

3.文件的关闭

通过调用函数fclose(文件指针);

4.文件的读写

字符读写函数:fgetc和fputc
字符串读写函数:fgets和fputs
数据块读写函数:fread和fwrite
格式化读写函数:fscanf和fprintf
使用上述函数时,都要包含stdio.h

字符读写函数:

fgetc函数,在调用过程中,文件必须是以读或读写方式打开。同时在文件内部会有一个位置的指针,用来指向文件的当前读写字节,当文件打开是,指针总是会指向文件的第一个字节,使用fgetc之后,该位置指针将向后移动一个字节,因此可以多次使用fgetc函数读取多个字符。当读到EOF时,代表读到最后了(对于二进制文件使用feof(fp),如果函数feof的返回值为1代表文件结束,否则文件未结束)。
这里要说明的是,文件指针和文件内部的位置指针是两个概念,后者是系统自动设置的。

字符串读写函数:

fgets函数
函数调用一般格式:

fgets(str,n,fp);	//函数作用从fp所指的文件中独处n-1个字符送入字符数组str中
//函数原型为:char * fgets(char *_Buffer, int _MaxCount, FILE *_Stream) 
//特殊的,还可以从键盘获取字符串,键盘在系统中也被认为是一个文件
//fgets(buffer,LEN,stdin);	//stdin可以理解为使键盘的输入保存的一个“临时”的文件

这里是n-1个的原因是因为会自动填充一个‘’到字符串结尾。一共构成一个n个字符的字符串,返回值为字符串的首地址。
fputs函数
函数一般格式:

fputs("string",fp);	//把字符串string写入fp所指向的文件之中
//函数原型为:int fputs(const char *_Buffer, FILE *_Stream)

输入成功返回0,输入失败返回EOF。

数据块读写函数:

fread函数:
函数调用一般格式:

fread(buffer,size,count,fp);

fwrite函数:
函数调用一般格式:

fwrite(buffer,size,count,fp);

其中,buffer:是一个指针,对于fread来说,它是读入数据的存放地址,对于fwrite来说,是要输出数据的地址,均指的是起始地址。
size:要读写的字节数;
coutn:要进行读写多少个size字节的数据项;
fp:要操作的文件;
举例说明:

struct student_type
{
	char name[10];
	int num;
	int age;
	char addr[30];
}student[40];
//可以用fread和fwrite来进行数据的操作
for(i=0;i<40;i++)
{
	fread(&student[i],sizeof(struct student_type),1,fp);
}
for(i=0;i<40;i++)
{
	fwrite(&student[i],sizeof(struct student_type),1,fp);
}
//以上就是按照块的格式进行操作的意义,不会打乱块内的数据顺序和数据本身
格式化读写函数:

fprintf():
函数调用:

fprintf(文件指针,格式字符串,输出列表);
fprintf(fp,"%d,%6.2f",i,t);

fscanf():
函数调用:

fscanf(文件指针,格式字符串,输入列表);
fscanf(fp,"%d,%f",&i,&t);
顺序读写和随机读写:

顺序读写:位置指针按字节位置顺序移动。
随机读写:读完上一个字符(字节)后,并不一定要读写其后续的字符(字节),而可以读写文件中任意位置的字符:

fseek函数:改变文件的位置指针
函数形式:

fseek(文件类型指针,位移量,起始点);
fseek(fp,100L,0);//将位置指针移动到离文件头100个字节处
fseek(fp,50L,1);//将位置指针移到离当前位置50个字节处
fseek(fp,50L,2);//将位置指针从文件末尾向后退50个字节
fseek(fp,i*sizeof(struct stu),0);

起始点:
文件开头 SEEK_SET 0
文件当前位置 SEEK_CUR 1
文件末尾 SEEK_END 2
位移量:
以起始点为基点,向前移动的字节数,注意理解这里的“前”的含义;

ftell函数

函数作用:得到流式文件中的当前位置,用相对于文件开头的位移量来表示。
返回值:返回当前的位置,出错时返回-1L。
一般使用例子:

i=ftell(fp);
if(i==-1L)
{
	printf("errorn");
}

出错的检测:

ferror函数

使用例子:

ferror(fp);
//返回值0:表示未出错;
//返回非0值:表示出错;

需要注意的是,在调用一个输入输出函数后立即检查ferror函数的返回值,否则信息会丢失 ,使用fopen函数时,ferror函数的返回值自动置为0。

clearerr函数

调用形式:

clearerr(fp);
//使文件错误标志和文件结束标志置为0
//只要出现了错误标志,就会一直保留,知道对同一文件调用了clearerr函数和rewind函数,或者其他的输入输出函数
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942773.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号