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

写程序时,有一段代码使用了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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值