[干货]文件输入输出实例&Ptask的编写

前言

最近在写Ptask,顺便了解了如何进行文件读入输出。而在Ptask中最重要,也是最最容易出bug的地方就是文件操作。那么如何进行文件输入输出,在程序中起到重要作用呢?

输入

首先为了保证可以在控制台和文件中都可以进行输入输出,我们不用freopen(据说开启文件读入后就切换不回来了)然后就只能用头文件<fstream>中的ifstreamofstream了。

首先我们需要利用ifstream 名字去开启一个输入的文件流。比如

ifstream in;
in.open("in.txt");
in >> a;

在这个实例中我们用in打开了in.txt这个文档,目前是只读文档,然后在里面读了一个a。
整数的话没有尝试,但是字符串一般是读一行。

为什么是只读文档呢?
因为我们只开启了一个读入的文件流,经尝试过后我发现,无法同时开启读入和输出两个流。否则会乱码。(不一定正确,如有错误请纠正)

然后读完过后就用in.close()操作关掉这个输入流。

输出

输出和输入道理类似,只是用ofstream罢了。

实例

那么我们来直接看看一个实例,以下是Ptask的部分源码(内容有所改变)。

void end()
{
	ofstream out;
	out.open(txtname);
	n = 0;
	for(int i = 1; i <= 100; i++)
	{
		if(strlen(name[i]) == 0)
			continue;
		if(del[i] == 1)
			continue;
		n++;
	}
	out<<n<<endl;
	out<<themer<<endl;
	out.close();
}

我们看到,open中文件名是可以用字符串代替的,而且为了方便读入,我在每一项信息过后都换行符。

Ptask的功能当中,一个比较难实现的就是删除操作的实时显示,本来是可以利用大量代码实现的,但是利用文件操作也可以实现。
我们只需要对删除的内容做好标记,然后将未删除内容导出,最后重新导入显示,相当于重新加载了文档。但也是由于删除操作的实现原理原因,我们无法不保存某一个删除操作。

由于代码已经写好了,如果要改那么这个工程量可是难以想象的,毕竟后面的工能都有依赖于文件操作。我一个人改,哎,弄不来。

在最后的最后如果你认为这里的内容对你有所帮助,那么在右下角点个关注或者点个推荐或者把这篇文章分享出去,然后,没了。

原文地址:https://www.cnblogs.com/ahann/p/12643978.html