前段时间面试有个涉及到文件操作的笔试题,才发现好久不用,自己已经忘掉怎么用了,今天特地复习了一下,这里做个记录
输入输出类iostream大家都用过,其实它是由istream和ostream共同派生出来的。文件操作有三个类,继承自istream的ifstream类、继承自ostream的ofstream类以及继承自iostream的fstream类。
网上说C++的iostream库主要包含以下几个头文件:fstream iomainip、ios、iosfwd、iostream、istream、ostream、ssstream、streambuf、strstream,不过我没有都看,只是挑了基础的几个看了看。
PS:C++和C的输入输出操作的不同在于,C的printf和scanf都是函数,而C++中的cin和cout都是全局对象。
下面来看看文件操作类的相关内容。
首先ofstream,它的默认构造函数是ofstream::ofstream(const char* filename, int mode=ios::out, int openprot=filebuf::openprot),对应着文件名,打开方式已经文件属性
mode属性表
ios::app; 以追加的方式打开文件
ios::ate 文件打开后定位到文件尾,ios::app就包含此属性
ios::binary 以二进制方式打开文件,缺省的是文本方式
ios::in 文件以输入方式打开
ios::out 文件以输出方式打开
ios::trunc 如果文件存在,把文件长度设置为0,就是说每次打开时都会情况文件
openprot属性表
0:普通文件,打开访问
1:只读文件
2:隐含文件
4:系统文件
以上这些属性都是可以叠加的,例如说ios::in | ios::app
废话少说,直接上例子才是王道
int main()
{
char* filename="C:\\1.txt";
ofstream f(filename, ios::app);
f<<"这是我的第一个测试";
f.close();
return 0;
}
int main()
{
ofstream myfile;
myfile.open("C:\\1.txt", ios::app);
myfile<<"这是我的第一个测试";
myfile.close();
return 0;
}
int main()
{
ifstream myfile;
myfile.open("C:\\1.txt",ios::app);
char c;
string s;
while(myfile.get(c))
{
s+=c;
cout<<c;//或者cout.put(c);
}
cout<<endl;
cout<<s<<endl;
system("pause");
return 0;
}
上面介绍了ifstream和ofstream,下面来说说fstream,fstream可以同时对文件进行读写,这需要显式指定mode来实现
int main()
{
fstream myfile;
char* filename="C:\\1.txt";
myfile.open(filename,ios::out | ios::trunc);
myfile<<"Hello world!";
myfile.close();
myfile.open(filename, ios::in | ios::app);
char c;
string s;
while(myfile.get(c))
{
s+=c;
cout.put(c);//或者cout<<c;
}
cout<<endl<<s;
return 0;
}
以上就是我今晚总结了,内容很浅显,略作了解吧,有时间我会把那个笔试题贴上来
PS:如有错误,烦请指正,共同进步