无论构造,还是open,后面都可以加模式选择.以构造器为例:
[cpp]
ofstream outfile("DATA.txt",ios::out|ios::trunc);
用了两种模式,要知道其实这两种模式就是两个8位数,通过"位或"可以把他们连起来用.
使用完毕,要关闭文件,outfile .close() 就可以了.
2、再说用ifstream把文件(辅存)里面的东西输入到程序(内存)里面吧.
下面是一个 DATA.txt 的文件内容:
[plain]
hello file!
Hi David!
写了三行.然后通过下面程序,就可以把这东西输出到屏幕:
[cpp]
int main()
{
string s;
ifstream infile("DATA.txt",ios::in);
if(!infile)return -1;
while(infile)
{
//istream& getline ( istream& is, string& str ); std里面的
getline(infile,s);//Get line from stream
cout<<s<<endl;
}
infile.close();
}
输出结果是:
[plain]
hello file!
Hi David!
请按任意键继续. . .
下面把DATA.txt改一下,解决我们文章一开始提到过的问题,不用命令行模式输入数据,用文本方式.下面是DATA.txt内容:
[plain]
12 33 44
22 463 93
63 48 9
好,下面写程序,把文件里面的东西传进数组里面.然后屏幕输出.
[cpp]
#include<iostream>
#include<fstream>
#include<iomanip> // 因为使用了setw()语句,设置位宽的.
using namespace std;
int main()
{
int num=3; //这个num自己也可以到控制台输入,程序现在不打算弄这个功能.
int **M=new int*[num]; //初始化行
ifstream infile("DATA.txt",ios::in);//初始化文件操作
if(!infile)return -1;//创建失败就返回错误
for(int i=0;i<num;i++)
{
M[i]=new int[num];//初始化列,到了这里已经成功初始化数组了
for(int j=0;j<3;j++)//这里开始给二维数组的每一个赋值
{
if(infile) infile>>M[i][j];//infile中读取数值,有空格就停,游标一直往下走下去
cout<<setw(5)<<M[i][j]; //设置位宽为5,输出到屏幕
}
cout<<endl; // 输出一行后换行
}
infile.close(); //关闭文件
}
输出结果:
[plain]
12 33 44
22 463 93
63 48 9
意键继续. . .
上面是一个格式化的输出哦~~位宽一定,为5,好看多了.这东西你可以再写进文件里面,哈哈~~