fstream、ifstream、ofsream使用的一點總結
來源:互聯網
上載者:User
寫程式時,有一段代碼使用了fstream來建立、讀寫隱藏檔案,但是卻發現了一些奇怪的問題:該建立時不建立,存在時卻無法讀取、修改,下面對這三類對象做了測試和總結,記錄如下:
1 測試檔案不存在時建立檔案
=========================================================fstream fs("aaa.txt", ios_base::in) 不建立
fstream fs("aaa.txt", ios_base::out) 建立
fstream fs("aaa.txt", ios_base::trunc) 不建立
fstream fs("aaa.txt"); //等同於下行
fstream fs("aaa.txt", ios_base::in | ios_base::out) 不建立
fstream fs("aaa.txt", ios_base::in | ios_base::trunc); 不建立
fstream fs("aaa.txt", ios_base::out | ios_base::trunc); 建立
fstream fs("aaa.txt", ios_base::in | ios_base::out | ios_base::trunc); 建立以上總結:
fstream 在檔案不存在時建立
要麼單獨使用ios_base::out
要麼同時使用ios_base::out | ios_base::trunc
=========================================================ofstream與fstream並沒有太大不同,
只是在你開啟時,不管有沒加ios_base::out,反正都會或一次(“_Mode | ios_base::out”)由前文結論可推斷,以下三種情況會建立檔案,其餘都不建立:ofstream ofs("aaa.txt")
ofstream ofs("aaa.txt", ios_base::trunc)
ofstream ofs("aaa.txt", ios_base::in | ios_base::trunc)
2 測試讀取隱藏檔案
=========================================================fstream fs("aaa.txt", ios_base::in) 能
fstream fs("aaa.txt", ios_base::out) 不能
fstream fs("aaa.txt", ios_base::trunc) 不能
fstream fs("aaa.txt"); //等同於下行
fstream fs("aaa.txt", ios_base::in | ios_base::out) 能
fstream fs("aaa.txt", ios_base::in | ios_base::trunc); 不能
fstream fs("aaa.txt", ios_base::out | ios_base::trunc); 不能
fstream fs("aaa.txt", ios_base::in | ios_base::out | ios_base::trunc); 不能以上總結:
fstream開啟隱藏檔案
要麼單獨使用ios_base::in
要麼不能有ios_base::trunc
=========================================================
ifstream與fstream也沒有太大不同,
只是在你開啟時,不管有沒加ios_base::in,反正都會或一次(“_Mode | ios_base::in”)由前文結論可推斷,以下兩種情況能開啟檔案,其餘都不能:
ifstream ifs("aaa.txt")
ifstream ofs("aaa.txt", ios_base::out)
3 測試讀取普通檔案=========================================================fstream fs("aaa.txt", ios_base::in) 能
fstream fs("aaa.txt", ios_base::out) 能
fstream fs("aaa.txt", ios_base::trunc) 不能
fstream fs("aaa.txt"); //等同於下行
fstream fs("aaa.txt", ios_base::in | ios_base::out) 能
fstream fs("aaa.txt", ios_base::in | ios_base::trunc); 不能
fstream fs("aaa.txt", ios_base::out | ios_base::trunc); 能
fstream fs("aaa.txt", ios_base::in | ios_base::out | ios_base::trunc); 能以上總結:
fstream開啟普通檔案
用ios_base::trunc時必須同時有ios_base::out
=========================================================
ifstream與fstream也沒有太大不同,
只是在你開啟時,不管有沒加ios_base::in,反正都會或一次(“_Mode | ios_base::in”)由前文結論可推斷,以下一種情況不能開啟檔案,其餘都能:
ifstream ofs("aaa.txt", ios_base::trunc)