想将这个内容掌握已经很久了,一直没有付诸行动。
每次使用文件操作时都不记得还要再去看以前有用到文件操作的博客,再有就是有时候编程结果不对,修改代码后又得重新输入,着实麻烦,今天就将这两方面的内容一起复习下,同时分享给大家。
平时在oj上做题碰到硬点子过不去时强烈推荐用freopen(),可以节约大量输入时间,当然比较简单的就不要用了,去写文件和这行代码也需要消耗时间。
而C++最近银行系统、图书馆等的内容出现的比较频繁啊,也是需要掌握使用文件操作的。
<1>
在C语言中,怎样直接用txt文件输入以及把输出结果直接输出到文件中。写法很简单:
freopen("Input.txt","r",stdin);
freopen("Output.txt","w",stdout);
是调一个通用的函数 freopen,在头文件 <stdio.h>中,这个函数有三个参数,第一个表示读入或者输出文件的文件名,第二个有两个可选参数, “w”表示write,即 写入,“ r”表示read,标 读入,然后最后一个也是固定的用法, stdin表示读入,而stdout标输出,基本用法是固定的,没有什么变化,因此只要记住这个固定结构就可以了。
<2>
在C++中;
首先看看怎么读入文件(即将要输入的内容从文件中直接读取)。
读入文件的话首先要使用用类ifstream,它在头文件<fstream>中。
(cin是其衍生出的一个变量,所以cin的所有用法同样也可以用于这个类。)
以前几篇博客中《 第3周项目5-数组作数据成员(4)》为例:
void Salary::set_salarys()
{
int i=0;
<span style="color:#ff0000;"><u>ifstream infile("salarys.txt",ios::in);</u> </span>// 按照读取的方式打开文件"salarys.txt",
if (!infile) //如果打开失败
{
cerr<<"open error!"<<endl;
exit(1); //输出打开失败并退出
}
while (infile>>salarys[i]) //读入成功则按照顺序读入文件内容
{
i++;
}
number=i;
infile.close(); //文件读入完毕一定要关闭
}
首先运行这个程序的时候需要在你存放源代码文件的文件夹中建立一个txt格式的文本并命名为salarys,并在其中提前写入相对应的数据再运行程序。
需要注意的是这里的输出打开失败的时候用的是cerr而不是cout,同时当使用exit(1)退出时需要头文件<cstdlib>。
再来看看怎么通过程序在文件中写入内容。
它也包含一个类ofstream,同样在头文件<fstream>中。
(cout是这个类衍生出的一个变量,因此cout的用法都可以用于这个类,只是它是直接用于输出到文件中。)
依旧依博客《第3周项目5-数组作数据成员(4)》中文件写入为例
void Salary::save_salarys( )
{
int i;
<strong><u><span style="color:#ff0000;">ofstream outfile("salary_data.txt",ios::out); </span></u></strong>//以输入的方式打开文件
if(!outfile) //测试是否成功打开
{
cerr<<"open error!"<<endl;
exit(1); //同上
}
for(i=0; i<number; ++i)
{
outfile<<salarys[i]<<endl; //从运行窗口或者代码中赋值的内容正在按照顺序输入到文件中
}
outfile.close(); //文件写入完毕也一定要关闭
}
运行程序时不需要先建立文件吗,在程序运行结束后,它会自动在相应的文件夹中生成文件salary_data.txt,打开salary_data.txt就会发现你所输入的东西已经按照顺序在里面了。
其他方面和读取时差不多,该加头文件还是得加,两者必须要注意的时使用文件后必须要关闭,不然就会出错。