1. 程式人生 > >MFC寫入檔案的尷尬——讓ofstream流行起來

MFC寫入檔案的尷尬——讓ofstream流行起來

ofstream對檔案進行讀寫

最近遇到一個問題:將MFC介面中的資料用.log程式日誌的形式儲存起來。使用連結串列對資料進行儲存是比較正常的選擇,但是對於C++的強大我認為不應該置之不理,於是決定使用ofstream對檔案進行寫操作。

但是結果真的很坑,除漢字外其他資料都是亂碼。原本以為是編譯器的編碼格式出了問題,但是,經過多方排除法,發現不是這樣的。

其實是CString的原因,ofstream能寫入的需要char *,這需要對其進行轉化。

CString轉換為char *網上的一些真的好坑。

實踐之後才知道CString 有CStringA和CStringW兩種。
ANSII 和Wide寬位元組。

對於UNICODE編碼的編譯器來說,簡直噩夢,各種格式轉換。。。

CStringA Test;
char *test;
test= Test.GetBuffer();

只有CStringA才行,如果是CStringW還需要轉換為CStringW。

C++的檔案操作函式對輸入輸出流進行處理,真的很強大。

補充一:OnLvnItemchangedList函式不響應

MFC ListControl View外觀設定 的“陷阱”
預設情況下,如果你將ListControl控制元件的view設定為Report(報表格式)
在設定響應函式OnLvnItemchangedList時會出現無法響應的情況,原本以為是沒有將singal selection(單選)設定為true,後來發現view設定為icon就可以響應。

其實這裡有個“陷阱”,屬性中的view使用icon,但是要在程式碼中設定為Report。手動新增,在初始化介面的程式碼裡新增即可
CListCtrl.ModifyStyle(0, LVS_REPORT);

之後OnLvnItemchangedList可以正常使用,還有一個方法就是新增單擊事件。總之就是希望大家不要掉坑裡,我把自己的脫坑經驗拿出來晒晒,有點low,但出發點很高大。