2010-10-22 65 views
2

我是新來的MFC,一旦我在myApp :: InitInstance()中創建了我的第一個應用程序。我有將文件設置保存在ini而不是註冊表中

SetRegistryKey(_T("Local AppWizard-Generated Applications")); 

我可以刪除它並將設置保存到我自己的ini構造中嗎?

回答

7

編輯:經過進一步測試,如果您的應用程序類別來自CWinAppEx,以下解決方案不起作用!如果你的應用直接來源於CWinApp,它確實有效。


存儲值在.ini文件,而不是註冊表:

  1. 省略調用SetRegistryKey
  2. 在您的應用類中,將m_pszProfileName設置爲您的.ini文件的完整路徑。文件名字符串必須使用malloc進行分配,因爲當您的應用程序關閉時,框架將調用free。首先free現有的值,然後指派新的字符串:

    free((void*)m_pszProfileName);
    m_pszProfileName = ::_tcsdup(_T("C:\\somedir\\myini.ini"));

  3. 呼叫CWinApp::GetProfileIntCWinApp::WriteProfileInt和類似的功能如常。

我強烈建議使用APPDATA下的路徑來存儲您的.ini文件。

+0

感謝您的回答:) – nXqd 2010-10-26 06:58:51

+1

我發現如果您的應用程序類是「CWinAppEx」的子類,則此解決方案不起作用。如果您的應用程序是「CWinApp」的直接子類,它仍然有效。我使用基於「CWinApp」的基於對話框的應用程序對其進行了測試,這就是爲什麼我沒有發現錯誤。 – Nate 2010-10-27 19:14:40

1

我不確定這是否可能,因爲.ini文件只有您的程序字符串。您可以創建一個操作系統腳本(.bat for windows,.sh for unix等)並使用system()調用來調用它。

2

是的,你可以。 CWinApp :: SetProfileXXX()實際上爲你實現了這一點 - 但在2010年,我不再使用這些方法,但當ppl從.ini移動到註冊表時,它們都可以。

+2

我看到人們真的很喜歡ini文件,程序將會是可移植的,註冊表有時候會變得混亂。謝謝 – nXqd 2010-10-22 14:36:11

1

使用Win32 API的WriteProfileString(寫入INI文件)和GetProfileString(從INI文件中讀取) 如需更多幫助 MS-幫助://MS.MSDNQTR.v90.en/sysinfo/base/writeprofilestring .htm

+0

這些函數已棄用並保留爲win16兼容性。你不應該使用它們或推薦它們。 – 2015-04-06 12:30:59