簡(jiǎn)單文件IO
要讓程序?qū)懭胛募?/p>
- 創(chuàng)建一個(gè)ofstream對(duì)象來(lái)管理輸出流
- 將該對(duì)象與特定的文件關(guān)聯(lián)起來(lái)
- 用cout的形式使用該對(duì)象师枣,輸入到文件怪瓶。
ofstream fout;
fout.open("jar.txt");
這是打開一個(gè)寫入文件,可以結(jié)合在一起:
ofstream fout("jar.txt");
寫入文件的話洗贰,使用cout的形式:
fout << "Dull Data";
默認(rèn)打開文件的方式會(huì)清空已有文件,或者創(chuàng)建一個(gè)新文件敛滋。
讀文件類似:
- 創(chuàng)建一個(gè)ifstream對(duì)象來(lái)管理輸入流
- 將該對(duì)象與特定的文件關(guān)聯(lián)起來(lái)
- 用cini的形式使用該對(duì)象许布。
ifstream fin;
fin.open("jellyjar.txt");
char ch;
fin >> ch;
輸入和輸入流對(duì)象過(guò)期時(shí)绎晃,會(huì)自動(dòng)關(guān)閉文件蜜唾,也可以手動(dòng)關(guān)閉文件:
fout.close();
fin.close();
流狀態(tài)檢查
對(duì)于文件流,可以這么檢查文件是否成功打開:
fin.open("a.txt");
if(fin.fail()) //打開失敗
{
}
還可以這么做:
if(!fin) //打開失敗
{
}
還可以使用is_open()方法:
if(!fin.is_open()) //打開失敗
{
}
打開多個(gè)文件
使用一個(gè)文件流對(duì)象連續(xù)處理文件:
ifstrean fin;
fin.open("fat.txt");
...
fin.close();
fin.clear(); //重置fin
fin.open("rat.txt");
...
fin.close();
文件模式
文件打開方法open()的第二個(gè)參數(shù)和文件流對(duì)象的構(gòu)造函數(shù)的第二個(gè)參數(shù)可以設(shè)置文件打開方式袁余。文件模式常量如下:
- ios_base::in,讀模式打開文件
- ios_base::out颖榜,寫模式打開文件
- ios_base::ate棚饵,打開文件掩完,并移到文件尾
- ios_base::app噪漾,追加到文件尾
- ios_base::trunc且蓬,如果文件存在,則截?cái)辔募?/li>
- ios_base::binary恶阴,二進(jìn)制文件
不同常量可以用|
隔開使用分别。ifstream的open()默認(rèn)的模式是ios_base::in存淫,ofstream的open()默認(rèn)的模式是ios_base::out | ios_base::trunc耘斩。
對(duì)于讀寫桅咆,文件流對(duì)象還有write()和read()方法括授。
隨機(jī)存取
fstream提供了兩個(gè)方法來(lái)在文件中移動(dòng)岩饼,seekg()和seekp()荚虚,前者將輸入指針移到指定的文件位置籍茧,后者將輸出指針移動(dòng)到只當(dāng)?shù)奈募恢冒媸觯部梢詫eekg()用于ifstream寞冯,seekp()用于ofstream渴析。
seekg()原型:
istream& seekg(streamoff, ios_base::seekdir);
istream& seekg(streampos);
第一個(gè)原型定位到第二個(gè)參數(shù)指定文件位置特定距離的位置吮龄,第二個(gè)定位到離文件開頭特定距離的位置