看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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 清掉 , 使該物件可重覆使用 } -- 「自從我學了 C# , 人都變聰明 , 考試都考一百分」 「自從我學了 VB , 皮膚都變好 , 人也變漂亮了 」 「自從我學了 Java , 明顯變壯 , 個子也變高了 」 「自從我學了 C++ , 內分泌失調 , 頭都禿了... 」 < Kuso 星爺語錄 > -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.74.8 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1419139902.A.ACA.html ※ 編輯: EdisonX (180.177.74.8), 12/21/2014 13:33:51
fireslayer: 學完C++再學C#,JAVA真的會寫到高潮 12/21 14:44
s25g5d4: 那 Python 怎麼辦? 12/21 14:46
PkmX: 檔案第一次開失敗 那你有開第二次嗎? 12/21 14:47
xshane831: 謝謝edisonx大! 12/21 14:49
PkmX: 不過其實我覺得每個iteration直接重新建一個local的ofstream 12/21 14:52
PkmX: 就好 不用自己去close()和clear() 12/21 14:53
Jimmy0301: 不贊同樓上,有開就要關 12/21 15:24
kwpn: local ofstream生命周期結束就會自動關呀 12/21 15:29
kwpn: 我比較傾向local ofstream的寫法 12/21 15:30
loveme00835: 推 PkmX。不用 RAII 幹嘛寫 C++,有 class 的 C 也 12/21 16:19
loveme00835: 不是這樣寫 12/21 16:19
loveme00835: 我都開新的 block 避免忘記寫 .close(),建構時就開 12/21 16:24
loveme00835: 檔也不需要 .open()。你要有個 name 給 block 後的 12/21 16:24
loveme00835: 區段用就 smart pointer 12/21 16:24
fireslayer: Local+1 但還是會寫close 12/21 20:19
EdisonX: 蠻多例子是用 local 開,在 dtor 時自動做,這點無誤. 12/21 21:50
EdisonX: 唯我只是覺得原 po 遇到的可能是我所敘述的問題. 12/21 21:51
PkmX: 所以一開始就在loop內開一個新的根本就不會有這問題不是= = 12/21 22:31
EdisonX: @PkmX , 是的。 12/21 22:43
loveme00835: 從OO的觀點來看,ofstream物件在這邊代表每次迭代時 12/22 10:10
loveme00835: 各自的寫檔操作,比起本來只有一個物件,創 local ob 12/22 10:10
loveme00835: j 更能反映問題;不然以跑迴圈前就創的那個物件來說 12/22 10:10
loveme00835: ,它的存在在問題裡是未定義的,這就是為什麼有的人 12/22 10:10
loveme00835: 寫碼不註解就很難理解的原因 12/22 10:10
ACMANIAC: 想問一下,每次都要重新創出 object 不會效率低落嗎? 12/24 03:57
cjcat2266: "效率相對較低" 不代表 "效率低落" 12/24 05:52
cjcat2266: 寫程是本來就是在"好讀、好維護"和"消耗硬體資源"之間 12/24 05:53
cjcat2266: 作取捨 12/24 05:53
cjcat2266: 付出一點點的資源換來好讀、好維護的程式碼是沒問題的 12/24 05:54
cjcat2266: 不然就乾脆完全不要用virtual function啦 :/ 12/24 05:55
azureblaze: 絕大部分狀況下人的時間比電腦的時間貴很多 12/24 13:00
ACMANIAC: 嗯... 是這樣沒錯 12/24 14:17
Killercat: 不是寫嵌入 不是寫critical section 不是寫超大資料流 12/24 17:25
Killercat: 就不要自作聰明過早最佳化,這其實很危險 12/24 17:25