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