写程序时,有一段代码使用了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 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
=========================================================
fstream 在文件不存在时创建
要么单独使用ios_base::out
要么同时使用ios_base::out | ios_base::trunc
=========================================================
ofstream与fstream并没有太大不同,
只是在你打开时,不管有没加ios_base::out,反正都会或一次(“_Mode | ios_base::out”)
只是在你打开时,不管有没加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)
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 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”)
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)
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 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”)
fstream打开普通文件
用ios_base::trunc时必须同时有ios_base::out
=========================================================
ifstream与fstream也没有太大不同,
只是在你打开时,不管有没加ios_base::in,反正都会或一次(“_Mode | ios_base::in”)
由前文结论可推断,以下一种情况不能打开文件,其余都能:
ifstream ofs("aaa.txt", ios_base::trunc)
ifstream ofs("aaa.txt", ios_base::trunc)