c第五天任务//用代码创建文件,输入内容,保存,读取内容//与C语言文件操作相关函数讲解

C第五天任务

输入文件名,创建文件,并写入文件内容。

如下:

在这里插入图片描述在这里插入图片描述

答案:
1:

#include <stdio.h>
#include <stdlib.h>

void main()
{
	FILE*fp;
	char ch,filename[20];

	printf("请输入文件名:\n");
	scanf("%s",filename);
	fp=fopen(filename,"w");
	ch=getchar();
	printf("请输入数据内容:\n");
    ch=getchar();
	while(ch!='\n')
	{
		fputc(ch,fp);
		ch=getchar();
	}
	fclose(fp);

	printf("Read Data:");
	fp=fopen(filename,"r");
    while(!feof(fp))
	{
		ch=fgetc(fp);
		putchar(ch);
	}
	fclose(fp);
	putchar(10);
}

2:

#include <stdio.h>

int main()
{
	FILE *fp=NULL;
	int temp;
	
	char fName[30];
	char Dbuf[100];
	
	memset(fName,0,30);

	printf("请输入文件名:\n");
	scanf("%s",fName);
	
	fp = fopen(fName,"w+");
	if(fp== NULL)
	{
		printf("文件创建失败\n");	
	}
	
	memset(Dbuf,0,100);
	
	printf("请输入数据内容:\n");
	
	scanf("%s",Dbuf);
	
	temp=fwrite(Dbuf,1,strlen(Dbuf),fp);
	
	fclose(fp);

	fp = fopen(fName,"rb");
	
	memset(Dbuf,0,100);
	
	fread(Dbuf,1,temp,fp);

	printf("Read Data: %s",Dbuf);
	
	fclose(fp);
	return 0;
}

现在讲解有关的几个函数:

1.fopen函数 — 打开一个文件流

函数原型:FILE* fopen(const char *path, const char *mode);
参数:参数path是需要打开文件的文件名,通常把它叫做文件的路径,
参数 mode 是打开文件的权限(只读、只写、读写等)。
返回值:打开成功返回指向打开文件的指针,后序可以通过这个指针来访问该文件。打开失败则返回NULL。

关于第三个参数----文件打开的方式有如下几个选项

r只读的方式打开
r+以读写的方式打开,读写都从文件开头开始(并不会清空文件里边原有的内容)
w只写的方式打开,先清空,再重头写
w+以读写的文件打开,如果该文件不存在就创建,如果存在,读写从文件开头开始,写之前要先清空文件里边原有的内容。
a如果文件不存在就创建,用于追加写入
a+用于追加读/写

2.fgetc/fputc函数 —读取/写入一个字节

函数原型:int fgetc(FILE *stream);
参数:打开的文件流,即fopen函数的返回值。
返回值:返回所读取的一个字节。如果读到文件末尾或者读取出错时返回EOF。

3.fgets/fputs函数 —读取/写入一个字符串

函数原型:char *fgets(char *str, int size, FILE *stream);
参数:
参数str,存储着需要写入的字符串/用于存储读出来的数据
参数size是读取或者写入的字符创的长度。
参数stream是打开的文件流,fopen函数的返回值。
返回值:调用成功,将读取的字符串返回,使用fgets函数读取的时候会自动在字符串后边加上一个‘\0’,失败返回NULL。

4.fread函数 —从文件流中读取一段数据

函数原型size_t fread(void *ptr, size_t size, size_t nmemb, FILE stream);
参数:参数ptr用于存放读取的内容。由于读取的内容的类型不固定(可叫做读取记录吧)有可能是一个字符,整型或者结构体,所以是void
类型的。
参数size 是读取记录的大小。
参数nmemb是读取记录的条数。
stream是文件流,fopen函数的返回值。
返回值:返回的是成功读取到的字节数。有时候我们期望读到很多数据,然后文件流里边又没有那么多数据,该函数会将我们已经读取到的数据的字节数返回。所以,返回值有时候并不等于我们期望读的数据的长度。

5.fwrite函数 —向文件里边写数据

函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
参数:参数ptr是想要写入到文件流里边去的内容。
参数size是将要写入元素的大小。
参数nmemb是将要写入元素的个数。
参数stream是将要写入的地方。
返回值:返回成功写入数据的字节数。

6.fprintf函数 —将格式化的数据写入文件

函数原型:int fprintf(FILE *stream, const char *format, …);
参数:参数stream是文件指针
参数format格式化字符串
后边跟输出列表
返回值:本次写入操作写到文件中的字节数。
使用:fprintf(fp, “%d”,buffer);
fprintf与printf的不同之处在于printf是写入到标准输出(屏幕),而fprintf是将数据写入到指定的文件中去。

7.fscanf函数 —格式化的数据读出到变量

函数原型:int fscanf(FILE *stream, const char *format, …);
参数:参数stream是文件指针
参数format格式化字符串
后边跟将要被赋值的变量
返回值:本次成功获取数据的字节数。
fscanf与scanf函数的区别在于scanf是从标准输入(键盘)读取数据,而fscanf是从指定的文件中读取数据。

8.fseek函数 —控制文件指针偏移

函数原型:int fseek(FILE *stream, long offset, int whence);
参数:参数stream是文件指针。
offset是偏移量。
whence是指偏移方式。有如下三种值可选:
SEEK_SET 从距文件开头offset 位移量为新的读写位置.
SEEK_CUR 以目前的读写位置往后增加offset 个位移量.
SEEK_END 将读写位置指向文件尾后再增加offset 个位移量.
说明:当whence 值为SEEK_CUR 或SEEK_END 时, 参数offset 允许负值的出现.
给出两种比较特别的使用方式
1)、将文件指针移动到开头:fseek(fd, 0, SEEK_SET);
2)、将文件指针移动到结尾:fseek(fd, 0, SEEK_END);
返回值:调用成功返回0,失败返回-1,errno会存放错误代码。

9.ftell函数 —获取当前文件指针的位置

函数原型:long ftell(FILE *stream);
返回值:文件指针相对于文件开头的偏移量。

10.rewind函数 —将文件指针指向文件的开头

函数原型:void rewind(FILE *stream);

11.feof函数 —判断文件指针是否指向文件结尾

函数原型:int feof(FILE *stream);
返回值:如果已经到达文件的结尾(已经将文件的最后一个字符都读走了),返回0,否则返回非0数字。
EOF(end of file的简写)是文本文件结束的标志。在文本文件中,数据已字符的ASCⅡ码值的形式存放,普通字符的ASCⅡ码的范围是32到127(十进制),EOF的16进制代码为0XFF(十进制为-1),因此可以用EOF作为文件的结束标识。当把数据以二进制的形式存放到文件中时,就有可能会将数字-1存放到文件中,此时继续根据EOF来判断文件是否结束就会出问题,为了解决这个问题,ASCI C 就提供了feof 函数。

12.使用函数fclose(FILE* stream)关闭打开的文件

打开一个文件后没有使用flose关闭 会导致文件句柄泄漏或者可以统称为资源泄漏。

————————————————
本篇文章部分转载下方链接处的文章,在此对原创文章博主做出感谢!
原文链接:https://blog.csdn.net/guaiguaihenguai/article/details/79933747

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值