Re: [问题] ofstream 开启失败

楼主: EdisonX (卡卡兽)   2014-12-21 13:31:37
※ 引述《xshane831 (Shane)》之铭言:
推文麻烦
: char filename[]="Result.txt";
: ofstream fp;
下面三行我觉得没太必要,
: fp.open(filename, ios::out);
: if(!fp)
: fp.open(filename, ios::out);
假设第一次的 fp.open 是失败的话
我不确定再做一次 fp.open 有什么意义
若真要这么做,在第二次 open 之前再把所有 flag 清掉
后面两行变成
if(!fp) {
fp.clear() ;
fp.open(filename, ios::out);
}
但真觉得没太大必要
: if(fp)
: {
: fp << xxxxxx;
: fp << endl;
: }
: fp.close();
下面 sample 大概是你要的
for( i = 0 ; i < ntimes ; ++i)
{
fp.open(filename, ios::out);
if(fp) {
fp << xxxxxx;
fp << endl;
fp.close(); // 开启成功才有必要 close , 失败就不用 close
}
fp.clear(); // 把 ostream 所有 flag 清掉 , 使该物件可重复使用
}
作者: fireslayer (fireslayer)   2014-12-21 14:44:00
学完C++再学C#,JAVA真的会写到高潮
作者: s25g5d4 (function(){})()   2014-12-21 14:46:00
那 Python 怎么办?
作者: PkmX (阿猫)   2014-12-21 14:47:00
档案第一次开失败 那你有开第二次吗?
作者: xshane831 (Shane)   2014-12-21 14:49:00
谢谢edisonx大!
作者: PkmX (阿猫)   2014-12-21 14:52:00
不过其实我觉得每个iteration直接重新建一个local的ofstream就好 不用自己去close()和clear()
作者: Jimmy0301 (Jimmy)   2014-12-21 15:24:00
不赞同楼上,有开就要关
作者: kwpn (ITSST)   2014-12-21 15:29:00
local ofstream生命周期结束就会自动关呀我比较倾向local ofstream的写法
作者: loveme00835 (发箍)   2014-12-21 16:19:00
推 PkmX。不用 RAII 干嘛写 C++,有 class 的 C 也不是这样写我都开新的 block 避免忘记写 .close(),建构时就开档也不需要 .open()。你要有个 name 给 block 后的区段用就 smart pointer
作者: fireslayer (fireslayer)   2014-12-21 20:19:00
Local+1 但还是会写close
楼主: EdisonX (卡卡兽)   2014-12-21 21:50:00
蛮多例子是用 local 开,在 dtor 时自动做,这点无误.唯我只是觉得原 po 遇到的可能是我所叙述的问题.
作者: PkmX (阿猫)   2014-12-21 22:31:00
所以一开始就在loop内开一个新的根本就不会有这问题不是= =
楼主: EdisonX (卡卡兽)   2014-12-21 22:43:00
@PkmX , 是的。
作者: loveme00835 (发箍)   2014-12-22 10:10:00
从OO的观点来看,ofstream物件在这边代表每次迭代时各自的写档操作,比起本来只有一个物件,创 local obj 更能反映问题;不然以跑循环前就创的那个物件来说,它的存在在问题里是未定义的,这就是为什么有的人写码不注解就很难理解的原因
作者: ACMANIAC (請肥宅救救肥宅)   2014-12-24 03:57:00
想问一下,每次都要重新创出 object 不会效率低落吗?
作者: cjcat2266 (CJ Cat)   2014-12-24 05:52:00
"效率相对较低" 不代表 "效率低落"写程是本来就是在"好读、好维护"和"消耗硬件资源"之间作取舍付出一点点的资源换来好读、好维护的程式码是没问题的不然就干脆完全不要用virtual function啦 :/
作者: azureblaze (AzureBlaze)   2014-12-24 13:00:00
绝大部分状况下人的时间比电脑的时间贵很多
作者: ACMANIAC (請肥宅救救肥宅)   2014-12-24 14:17:00
嗯... 是这样没错
作者: Killercat (杀人猫™)   2014-12-24 17:25:00
不是写嵌入 不是写critical section 不是写超大资料流就不要自作聪明过早最佳化,这其实很危险

Links booklink

Contact Us: admin [ a t ] ucptt.com