简单文件IO
要让程序写入文件,要:
- 创建一个ofstream对象来管理输出流
- 将该对象与特定的文件关联起来
- 用cout的形式使用该对象,输入到文件。
ofstream fout;
fout.open("jar.txt");
这是打开一个写入文件,可以结合在一起:
ofstream fout("jar.txt");
写入文件的话,使用cout的形式:
fout << "Dull Data";
默认打开文件的方式会清空已有文件,或者创建一个新文件。
读文件类似:
- 创建一个ifstream对象来管理输入流
- 将该对象与特定的文件关联起来
- 用cini的形式使用该对象。
ifstream fin;
fin.open("jellyjar.txt");
char ch;
fin >> ch;
输入和输入流对象过期时,会自动关闭文件,也可以手动关闭文件:
fout.close();
fin.close();
流状态检查
对于文件流,可以这么检查文件是否成功打开:
fin.open("a.txt");
if(fin.fail()) //打开失败
{
}
还可以这么做:
if(!fin) //打开失败
{
}
还可以使用is_open()方法:
if(!fin.is_open()) //打开失败
{
}
打开多个文件
使用一个文件流对象连续处理文件:
ifstrean fin;
fin.open("fat.txt");
...
fin.close();
fin.clear(); //重置fin
fin.open("rat.txt");
...
fin.close();
文件模式
文件打开方法open()的第二个参数和文件流对象的构造函数的第二个参数可以设置文件打开方式。文件模式常量如下:
- ios_base::in,读模式打开文件
- ios_base::out,写模式打开文件
- ios_base::ate,打开文件,并移到文件尾
- ios_base::app,追加到文件尾
- ios_base::trunc,如果文件存在,则截断文件
- ios_base::binary,二进制文件
不同常量可以用|
隔开使用。ifstream的open()默认的模式是ios_base::in,ofstream的open()默认的模式是ios_base::out | ios_base::trunc。
对于读写,文件流对象还有write()和read()方法。
随机存取
fstream提供了两个方法来在文件中移动,seekg()和seekp(),前者将输入指针移到指定的文件位置,后者将输出指针移动到只当的文件位置,也可以将seekg()用于ifstream,seekp()用于ofstream。
seekg()原型:
istream& seekg(streamoff, ios_base::seekdir);
istream& seekg(streampos);
第一个原型定位到第二个参数指定文件位置特定距离的位置,第二个定位到离文件开头特定距离的位置
网友评论