推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

C语言之文件的读写(1)

   2023-06-23 网络整理佚名2170
核心提示:顺序读写函数介绍txt文件来看一看我们刚才的26个字母是否都已经写到文件里面了大家看fgetc就把文件里面的所有字符都读取出来了现在我们要随机读一行数据应该怎么办呢,所以我们引入fgets函数读到的字符串将会拷贝到str指向的空间的位置如果想要把数据从文件中读出来,这里就必须引入函数我们以二进制的形式写进去那么就可以以二进制的形式读出来,这时候就要引入fread函数

前三部分已经给您介绍了,将把网址发给您审核

打开如下:

文件使用是指如果指定的文件不存在

“r”(只读)打开现有文本文件进行数据输入时出错

“w”(只写)打开文本文件并创建一个新文件用于输出数据

“a”(追加)将数据添加到文本文件末尾以创建新文件

“rb”(只读)打开二进制文件进行数据输入时出错

“wb”(只写)打开二进制文件并创建一个新文件用于输出数据

“ab”(追加)将数据追加到二进制文件的末尾以创建新文件

“r+”(读取和写入)打开文本文件进行读取和写入时出错

“w+”(读和写)用于读和写,建议一个新文件创建一个新文件

“a+”(读写)打开一个文件,在文件末尾读写创建一个新文件

“rb+”(读写)打开二进制文件进行读写时出错

“wb+”(读写) 创建一个新的二进制文件,用于读写 创建一个新文件

“ab+”(读写)打开一个二进制文件,在文件末尾读写创建一个新文件

示例代码:


#include 
int main ()
{
  FILE * pFile;
  //打开文件
  pFile = fopen ("myfile.txt","w");
  //文件操作
  if (pFile!=NULL)
 {
    fputs ("fopen example",pFile);
    //关闭文件
    fclose (pFile);
 }
  return 0;
}

4. 文件的顺序读写 4.1 顺序读写功能介绍

函数函数名适用于

字符输入函数 fgetc 所有输入流

字符输出函数fputc所有输出流

文本行输入函数fget所有输入流

文本行输出函数 fputs 所有输出流

所有输入流的格式化输入函数

所有输出流的格式化输出功能

二进制输入 fread 文件

二进制输出文件

#define _CRT_SECURE_NO_WARNINGS 1
#include
//#include
#include
#include
int main()
{
	FILE* pf = fopen("test.txt", "w");//定义一个变量pf,pf指向这个文件信息区,文件信息区和文件本身相关联,这时候我们就可以读或者写或者对文件做一些其他的事情等等
	if (pf == NULL)
	{
		printf("%s\n", strerror(errno));
		return 1;
	}
	//写文件
	//......
	//关闭文件
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

这里可能有同学会问,为什么要关闭pf指向的文件呢?

这是因为文件也是一种资源。 最后,如果关闭文件,就会释放资源。 程序可以打开的文件数量是有限的。 并不是说可以无限期地开放。 文件很多,如果不关闭这个文件可能会导致数据丢失等情况,所以一定要关闭该文件并将其设置为NULL

fputc函数

我们看一下代码

#define _CRT_SECURE_NO_WARNINGS 1
#include
//#include
#include
#include
int main()
{
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
		printf("%s\n", strerror(errno));
		return 1;
	}
	char i = 0;
	for (i = 'a'; i <= 'z'; i++)
	{
		fputc(i, pf);
	}
	//写文件
	//......
	//关闭文件
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

你可以复制代码自己测试一下

这时候我们再打开test.txt文件,看看我们刚才写的26个字母是否已经全部写入到文件中了

大家看看,结果是真的

现在我们想以字符的形式取出我的my文件中的所有字符。 这时候我们就要用到fgetc函数

fgetc 函数

简而言之,如果读取到错误的字符,则返回EOF

现在我们看一下代码

#define _CRT_SECURE_NO_WARNINGS 1
#include
//#include
#include
#include
int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		printf("%s\n", strerror(errno));
		return 1;
	}
	int ch = 0;
	while ((ch = fgetc(pf)) != EOF)
	{
		printf("%c ", ch);
	}
	//char i = 0;
	//for (i = 'a'; i <= 'z'; i++)
	//{
	//	fputc(i, pf);
	//}
	//写文件
	//......
	//关闭文件
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

大家看到fgetc读取了文件中的所有字符

现在我们写入一行数据,这个时候我们需要用到fputs函数

输出函数

const char * str,文件 *

这里的Write to表示将字符串写入流(即文件)中

你看,你可能会有疑问,我们刚才不是写了26个英文字母吗,为什么这里少了26个字母?这是因为当你再次向文件写入数据时,它会自动清除你在文件中写入的所有内容。原始文件,然后重写它。 希望大家能够理解

#define _CRT_SECURE_NO_WARNINGS 1
#include
//#include
#include
#include
int main()
{
	FILE* pf = fopen("test.txt", "w");//"w"改成"a"的时候是追加的意思。我们来看下面的图片
	if (pf == NULL)
	{
		printf("%s\n", strerror(errno));
		return 1;
	}
	fputs("hello bit", pf);
	//int ch = 0;
	//while ((ch = fgetc(pf)) != EOF)
	//{
	//	printf("%c ", ch);
	//}
	//char i = 0;
	//for (i = 'a'; i <= 'z'; i++)
	//{
	//	fputc(i, pf);
	//}
	//写文件
	//......
	//关闭文件
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

FILE pf = fopen("test.txt", "w");//当"w"改为"a"时,表示追加。 我们来看看下面的图片*

现在我们想要随机读取一行数据该怎么办呢,所以我们引入fgets函数

fgets 函数

读取的字符串会被复制到str指向的空间

将复制到 str 的最大字符数

你可以尝试自己去理解

#define _CRT_SECURE_NO_WARNINGS 1
#include
//#include
#include
#include
int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		printf("%s\n", strerror(errno));
		return 1;
	}
	char arr[20];
	fgets(arr, 5, pf);
	printf("%s\n", arr);//放5的时候最多能够读到4个
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

下面我给大家介绍一下这个功能,使用起来比较方便

功能

#define _CRT_SECURE_NO_WARNINGS 1
#include
//#include
#include
#include
int main()
{
	FILE* pf = fopen("test", "r");
	if (pf == NULL)
	{
		//printf("%s\n", strerror(errno));
		perror("fopen");
		return 1;
	}
	char arr[20];
	fgets(arr, 5, pf);
	printf("%s\n", arr);//放5的时候最多能够读到4个
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

/这里我给大家介绍一下该功能

功能

把代码给大家

#define _CRT_SECURE_NO_WARNINGS 1
#include
//#include
#include
#include
struct S
{
	char arr[20];
	int age;
	float score;
};
int main()
{
	struct S s = { "zhangsan",25,50.5f };
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
		//printf("%s\n", strerror(errno));
		perror("fopen");
		return 1;
	}
	fprintf(pf, "%s %d %f", s.arr, s.age, s.score);//fprintf将数据写到文件里面去
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

如果要从文件中读取数据,这里必须引入该函数

功能

#define _CRT_SECURE_NO_WARNINGS 1
#include
//#include
#include
#include
struct S
{
	char arr[20];
	int age;
	float score;
};
int main()
{
	struct S s = { "zhangsan",25,50.5f };
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
		//printf("%s\n", strerror(errno));
		perror("fopen");
		return 1;
	}
	fscanf(pf, "%s %d %f", s.arr, (&s.age), &(s.score));//fscanf从文件里面去读,将信息从pf指向的文件读出来放到s里面去,再将其打印出来
	printf("%s %d %f", s.arr, s.age, s.score);
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

功能介绍

功能

这时候你发现你有一些看不懂的东西,因为这是用二进制形式写的

如果我们以二进制形式写入它,那么我们就可以以二进制形式读取它。 这时候我们就需要引入fread函数

读取函数

我们以二进制形式写入,我们可以以二进制形式读出

#define _CRT_SECURE_NO_WARNINGS 1
#include
//#include
#include
#include
struct S
{
	char arr[20];
	int age;
	float score;
};
int main()
{
	struct S s = { "zhangsan",25,50.5f };
	FILE* pf = fopen("test.txt", "wb");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//fwrite(&s, sizeof(struct S), 1, pf);
	fread(&s, sizeof(struct S), 1, pf);
	printf("%s %d %f\n", s.arr, s.age, s.score);
	fclose(pf);
	pf = NULL;//设置成空指针使其再也找不到这块空间
	return 0;
}

本章结束!

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON