fstream、ifstream、ofsream使用的一点总结

来源:互联网 发布:vb精简版 编辑:程序博客网 时间:2024/06/06 03:13
写程序时,有一段代码使用了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)
原创粉丝点击