C/C++如何修改文件内容以及如何从文件中导出数据;数据流的概念


文件读写
 

注意:这里的输入输出是相对于程序而言的!

下述的函数是一些比较简单的输入输出文件中内容的函数

fgetc :  字符输入--输入到程序中
fputc : 字符输出--输出到文件中
fgets : 文本输入
fputs : 文本输出
fwrite: 以二进制形式输出(输出程序,写入文件)
fread : 以二进制形式输入(读取文件,写入程序)

下图是cpp操作的文件夹目录;


 

 下面是一段实例,去一个个输入字符:


int main()
{
	FILE* pf = fopen("GuessWhat.txt","w");
	//使用指针接收fopen函数的返回值
	
	//空文件读取时,返回的指针为空指针!
	if (pf == NULL)
	{
		perror("fopen");//打开文件失败,报错
		return 1;
	}
	//接下来开始写文件,就是把内存中的数据输出到文件中
	//int fputc(int c, FILE* stream)  写一个字符,到数据流中
	//这里的c是指字符!FILE*stream是文件

	fputc('b', pf);
	fputc('o', pf);
	fputc('b', pf);

	fclose(pf);
	pf == NULL;//关闭文件


	return 0;
}

然后运行它,就可以看到目录中的GuessWhat.txt出现:

 这就说明,从程序中输出的数据,被输送到文件当中了。

下面还有几个实例,分别对应读、写字符串:

int main()
{
	FILE* pf = fopen("test.dat", "r");//w进行文件的读取
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//int fgetc(FILE* stream)从文件流里()读取字符到程序中;其返回值是一个字符(ASCIIM值)
	int ret = fgetc(pf);
	printf("%c",ret);
	ret = fgetc(pf);
	printf("%c", ret);
	ret = fgetc(pf);
	printf("%c", ret);
	ret = fgetc(pf);
	printf("%c", ret);
	
  fgetc读取一个字符之后,会自动指下一个字符!
 
	//多次读取并打印
  //但是如果读取多了,超过了文件本身的字符含量,那么读取值不确定,就会出现err

	//关闭文件
	fclose(pf);
	pf == NULL;


	return 0;
}


//int main()
//{
//
//
//
//	FILE* pf = fopen("test.dat","w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//int fputs(string,pf)
//	fputs("abcdef\n",pf);//写数据
//	//想要换行,需要写换行符
//	fputs("abcdef\n", pf);
//
//
//	//char* fgets(char *string, int n, FILE* stream)
//	// char* string是临时存放get到的数据,然后在n的判断下,输入到程序中,
//	// FILE* stream是文件名称/数据流的名称
//	//这里的n指的是读取的最多的数据个数
//
//
//	char arr[20] = {0};//这里使用数据临时接收数据
//	char *ret = fgets(arr, 4, pf);
//	printf("%s",ret);
//	
//	int r = fclose(pf);
//	pf == NULL;
//
//
//	return 0;
//}

以二进制形式读取、写入文件

书写一段二进制输出到文件中的代码段:

然后ctrl + F5直接执行程序,然后就可以打开test.dat,打开后发现文件中结果如下:

 下述代码段包含了fwrite函数的参数、返回值类型信息,以及其用法。

struct S
{
	char arr[10];
	int num;
	float sc;
};
int main()
{
	struct S s = { "abcdef", 10, 5.5f };
	//二进制形式写
	FILE* pf = fopen("test.dat", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	//(程序数据输出)——
	//fwrite(); writes data to a stream;
	//size_t fwrite(const void* buffer, size_t size, size_t cout, FILE*stream)
	//这里的buffer指向要写入的数据
	//这里的size指的是写入数据的字节大小(可以用int、struct之类的代替)
	//cout指的是写入数据的份数
	//FILE*stream指的是文件对应的流
	fwrite(&s, sizeof(struct S), 1, pf);//将S数据写入文件,写入字节大小为struct S;写一份;流为指针pf

	//关闭文件
	fclose(pf);
	pf == NULL;


	return 0;
}

很明显,只有字符串能够正常显示;这是因为,字符串无论是以文本形式写入文件,还是以二进制形式写入,内容都是一样的。而整数、浮点型等的书写,文本形式与二进制形式信息不同。

而我打开test.dat用的是文本编译器,如果使用VS打开,就会出现二进制显示。

 

数据流——流


引入概念:流
流:高度抽象的概念
程序可以放在屏幕、硬盘、U盘、光盘、网络上
程序与上述的对象,中间有一个流的概念;程序输入到"流中",而"流"向外部设备输出数据
C语言程序只要运行起来,就默认打开了3个流:stdin__标准输入流-键盘;stdout__标准输出流-屏幕;stderr__标准错误流-屏幕
实例如下:

从标注输入流中读取——从键盘读取

int main()
{
	int ret = fgetc(stdin);//直接从键盘中输入数据到程序当中
	printf("%c", ret);
	 ret = fgetc(stdin);//直接从键盘中输入数据到程序当中
	printf("%c", ret);
	 ret = fgetc(stdin);
	printf("%c", ret);
	 ret = fgetc(stdin);
	printf("%c", ret);
	return 0;
}

 上一张图片是在向程序中输入数据(即从文件中获取)

下面额stdout:标准输出流,就是直接通过流,来将数据从程序中输出到文件当中去。

当然,每次运行完fputc后,其将会自动右移;以便下个数据的输入。

fputc('f', stdout);
fputc('o', stdout);
fputc('o', stdout);
fputc('l', stdout);

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值