文件操作

c语言文件操作函数是FILE *fopen(const char *path, const char *mode);它的功能是打开文件,path指的是路径,mode指的是打开方式,一般打开方式有以下几种:
"r" 以只读方式打开文件,如果文件不存在则打开失败,返回值为NULL。
"r+" 在"r"的基础上增加写权限。
"w" 以只写方式打开文件,如果文件不存在则创建,如果文件存在则把内容清空。
"w+" 在"w"的基础上增加读取权限。
"a" 以只写方式打开文件,如果文件不存在则创建,如果文件存在则把内容保留,与"w"区别是当有新数据写入,会追加到文件的末尾。
"a+" 在"a"的基础上增加读权限。
如果是以二进制的方式操作文件那么在这些打开方式的后面加个"b"即可,比如打开一个二进制文件那么打开方式就是"rb",如果文件不存在则返回NULL。
函数的回值:是一个结构体指针,指向一个结构体对象,里面保存的是被打开文件相关信息(不要直接操作),它可以当作一个令牌,交给其它函数使用。

二进制文件与文本文件的区别:
二进制文件,把变量补码直接写到文件中,是看不懂的。
文本文件,把变量的值转换成字符写入文件中,是看的懂的。
文本文件存储的也是二进制,是ASCII码的二进制。

文本操作函数:

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

函数功能:把数据以文本形式写入到文件中
stream:文件指针,fopen函数的返回值
format:格式化控制符,点位符等
:要写入的变量。
函数返回值:成功写入的变量个数。

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

函数功能:从文件中读取数据到变量,要求文件的内容是字符。
stream:文件指针,fopen函数的返回值
format:格式化控制符,点位符等
:变量的地址
返回值:成功读取到返回0,失败返回-1。

二进制文件操作函数:

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

函数功能:把内存中的数据以二进制形式写入到文件中。
ptr:要写入的内存的首地址
size:要写入的字节数
nmemb:要写入的次数
stream:文件指针,fopen函数的返回值
返回值:成功写入的次数

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

函数功能:从文件中以二进制方式读取数据到内存中。
ptr:用来存放数据的内存首地址
size:要读取的字节数
nmemb:要读取的次数
stream:文件指针,fopen函数的返回值
返回值:成功读取的次数

下面我们利用学生结构体来说面上面函数的用法:
首先这个学生结构是:

typedef struct Student
{
	char name[20];
	char sex;
	short age;
	int id;
}Student;

我们把学生结构体变量以文本形式写"stu.txt"文件中:

    Student stu = {"hehe",'m',18,2016020318};
	FILE* fwp = fopen("stu.txt","w+");
	fprintf(fwp,"%s %c %hd %d",stu.name,stu.sex,stu.age,stu.id);

从"stu.txt"文件中读取学生结构变量,并显示。

	Student stu = {};
	FILE* frp = fopen("stu.txt","r");
	if(NULL == frp)
	{
		printf("文件打开失败!\n");
		return -1;
	}

	fscanf(frp,"%s %c %hd %d",stu.name,&stu.sex,&stu.age,&stu.id);
	printf("read:%s %c %hd %d\n",stu.name,stu.sex,stu.age,stu.id);

把学生结构体变量以二进制形式写"stu.bin"文件中。

	Student stu = {"haha",'w',28,2016020366};
	FILE* fwp = fopen("stu.bin","w");
	fwrite(&stu,sizeof(Student),1,fwp);

从"stu.bin"二进制文件中读取学生结构体变量,并显示。

	Student stu = {};
	FILE* frp = fopen("stu.bin","r");
	if(NULL == frp)
	{
		printf("文件打开失败!\n");
		return -1;
	}
	fread(&stu,sizeof(Student),1,frp);
	printf("read:%s %c %hd %d\n",stu.name,stu.sex,stu.age,stu.id);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值