看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) BCB 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) #include <fstream.h> 問題(Question): 在"日期-小時-分鐘-秒".text中寫入 日期-小時-分鐘-秒,且1秒加1行。 但好像是無法利用fstream寫入Unicodestring 餵入的資料(Input): 預期的正確結果(Expected Output): 同上 錯誤結果(Wrong Output): [BCC32 Error] Unit2.cpp(30): E2094 'operator<<' not implemented in type 'fstream' for arguments of type 'UnicodeString' 程式碼(Code):(請善用置底文網頁, 記得排版) void __fastcall TForm2::tmr1Timer(TObject *Sender) { if (startsave==true) { f1.open(dlgSave1->FileName.c_str(), ios::in|ios::out|ios::app); (問題出在這行) f1<<FormatDateTime("yyyy-mm-dd AM/PM hh-mm-ss", Now())<<"\r\n"; f1.close(); } } void __fastcall TForm2::btn2Click(TObject *Sender) { startsave=false; dlgSave1->Filter= "Text (*.txt)|*.txt|All Files|*.*|"; dlgSave1->FileName=FormatDateTime("yyyy-mm-dd AM/PM hh-mm-ss",Now());; dlgSave1->DefaultExt=".Txt"; dlgSave1->Execute(); f1.open(dlgSave1->FileName.c_str(),ios::out); f1<<"日期"<<"\r\n"; f1.close(); startsave=true; } 補充說明(Supplement): FormatDateTime("yyyy-mm-dd AM/PM hh-mm-ss",Now()) <=是Unicodestring 所以應該是要轉換成其它的類型,才能用fstream再寫入記事本對吧? 如果加FormatDateTime("yyyy-mm-dd AM/PM hh-mm-ss",Now()).c_str() (或w_str()) 可以成功執行無錯誤,但會出現輸入的不是日期,而是數字或亂碼.... 小弟我新手,不太懂怎麼轉換類型,網路上都寫得看不太懂 不知道有沒有什麼簡單的手法可以處理,感謝回答 -------------------------------------------------------------------------- 解答: 使用AnsiString(UnicodeString).c_str()即可解決 為何一定要加.c_str()是因為fstream無法輸入string 所以要先變成C語言形式的字串常數後,才能使用fstream輸入 那為何要先把UnicodeString換成AnsiString 日期才不會變成亂碼 完全不知道...囧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.136.194 ※ 編輯: laertes 來自: 220.132.136.194 (12/28 22:44)
laertes:=.= 解決了 12/28 23:20
laertes:使用AnsiString(UnicodeString).c_str()即可解決 12/28 23:20
laertes:可是我不懂為何使用AnsiString(UnicodeString)不能? 12/28 23:21
laertes:會出現ERROR:同上只是UnicodeString換成AnsiString 12/28 23:22
laertes:為何一定要加.c_str() 12/28 23:24
laertes:再來一個問題是為何要先換成AnsiString 12/28 23:26
laertes:直接用.w_str()不能?會變成輸入亂碼 12/28 23:27
laertes:.c_str()為將String物件轉換成C語言形式的字串常數 12/28 23:31
※ 編輯: laertes 來自: 220.132.136.194 (12/28 23:37)
firose:c_str() UnicodeString 傳回 wchar* AnsiString 傳回 char* 12/29 10:59
firose:AnsiString(UnicodeString)負責轉碼而 fstream 不吃 wchar* 12/29 11:00
laertes:我的問題是那個轉碼的細節是什麼?為何要先轉 12/29 11:09
laertes:AnsiString才不會變成亂碼,那代表的是什麼意思 12/29 11:10
laertes:感謝回答... 12/29 11:14
firose:你用 debugger 去看轉跟不轉的記憶體內容應該就可看到差異 12/29 11:19
laertes:OKOK...感謝 12/29 11:58