一.C++中,要让程序写入文件,应该要:1.创建ofstream对象;2.将该对象与目标文件关联起来;3.使用cout输出到文件中。
同理,读取文件的过程与写入相似:1.创建ifstream对象;2.将该对象与目标文件关联起来;3.使用cin输出到文件中。
以写入文件过程为例,以下是一个简单的例子:
ofstream fout("aa.tst"); //创建ofstream对象,并与aa文件关联;
fout<<"Hellow World"; //使用cout输出aa.txt到文件
要断开与文件的连接,可以使用close()显式的关闭连接而不删除流。
以下有两个例子:
#include // not needed for many systems
#include
#include
int main()
{
using namespace std;
string filename;
cout << "Enter name for new file: ";
cin >> filename;
ofstream fout(filename.c_str()); //将fout关联到目标(新建)文件,或者可以用fout.open(文件名)建立关联
fout << "C++"; // 输出到文件
cout << "Enter your message: "; // 显示信息
string mes;
cin >> mes;
fout << "Your messager is " << mes << endl;
fout.close(); // 关闭文件
ifstream fin(filename.c_str());
cout << "Here are the contents of " << filename << ":\n";
char ch;
while (fin.get(ch)) //从文件 读取
cout << ch; // 显示文件中的信息
cout << "Done\n";
fin.close();
return 0;
}
输入与结果:
另一个例子:
#include
#include
using namespace std;
int main()
{
char temp[25]={0};
ifstream fin( "123.txt" );
ofstream fout( "124.txt");
fin>>temp;
fout<
我先在123文件中写入"Hellow World",运行程序后,456也写入了"Hellow World"。
从这个例子可以注意到,fin关联到123文件,执行fin>>temp,时实际上是对123文件的读取并保存到temp中,同理因为 fout 关联到456文件,fout<<temp时将temp中的字符串输出到456文件中并保存.所以我是这样理解的,istream对象的作用是“将内容读入到其它对象",而ostream对象的作用是”将对象输出保存到文件“,前提是两种对象都已经关联到文件。
二.报告流状态,通过检查流状态来判断一个流操作是否成功,也就是文件是否成功打开。有以下常见方式(fin为ifstream对象):
fin.open("aa.txt");
f(fin.fail());
if(!fin);
if((!fin.good());
if(!fin.is_open())
其中以最后一种最佳。
三.当要依次处理一组文件的时候,可以先声明一个istream对象并使用open()方法与文件关联 ,注意声明时不要初始化该对象。之后是对文件的处理,并在最后使用依次closse()和clear()方法 ,才能够将该istream对象重新关联到另一文件。
关于文件模式:将流与文件关联时可以提供指定文件模式的第二个参数。常见文件模式有in(打开文件以读取),out(打开文件以写入),ate(打开文件并移到文件尾),trunc(打开文件并截断文件,清空已存在的文件流),binary(以二进制模式进行IO操作)。这些文件模式均在ios_base类中定义。格式如下:
ifstream fin(文件名,文件模式); //多种文件模式可以用“|”符号隔开合并在一起。
四.另外,fstream类为了在文件中移动添加两种方法:seekg()和seekp()。seekg将输入指针移到指定的文件位置,seekp()讲输出指针移到指定的位置。