ifstream note
-------------------------20100804-------------------------------------------
3 fstream對(duì)象未初始化時(shí), 使用if()判斷時(shí), 返回true;
ifstream ff;
cout << int(bool(ff)); //將會(huì)輸出1
?
4 close多次調(diào)用, 最終含義不一樣: windows上打開的文件被關(guān)閉多次后, fstream對(duì)象將不能再次使用; cent os上可以
ifstream ff;
ff.open("2.txt");
ff.close();
ff.close();
ff.open("2.txt");
cout << int(ff.is_open() && ff.good());
?
最后一條語句在windows上將會(huì)輸出0, 在cent os上將會(huì)輸出1。
?
5 未初始化的fstream對(duì)象被認(rèn)為是好的, 只不過一被讀取就到達(dá)eof了;
讀取一個(gè)不存在的文件后,fstream對(duì)象的狀態(tài)就為false(bad)了
?
----------------------------------------------------------------------------------
1 讀取status
ifstream f1("filename");
?
char buf[max];
while(f1.getline(buf, max))
{
??? //do something
}
?
假設(shè)文件有3行, while循環(huán)體執(zhí)行幾次? getline執(zhí)行幾次?
答: while循環(huán)體內(nèi)執(zhí)行3次, 但是getline成功執(zhí)行4次。
因?yàn)?#xff0c; 當(dāng)getline成功執(zhí)行第3次后,文件的狀態(tài)還是有效的; 再次執(zhí)行g(shù)etline時(shí),buf被置空且f1的status被設(shè)置為eof.
最好使用此種標(biāo)準(zhǔn)的寫法, 程序會(huì)更簡潔不易錯(cuò)
?
?
2 當(dāng)文件已經(jīng)是eof時(shí), seekg函數(shù)將不起任何作用, 此時(shí)tellg返回-1。 如果需要重設(shè)讀寫位置, 必需首先調(diào)用 f1.clear(),該函數(shù)將清除文件的狀態(tài)
f1.clear();
f1.seekg(10, ios::beg|cur|end);
?
總結(jié)
以上是生活随笔為你收集整理的ifstream note的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bogofilter 使用
- 下一篇: merge sort loser tr