2010-05-27 44 views
2

我正在考慮爲應用程序添加可配置的設置,我認爲最簡單的方法是外部文件或贏註冊表(它是一個贏只應用程序)。應用程序設置方法? C++

哪種方式會更好?

我想知道,沒有足夠權限的用戶可能無法創建/寫入配置文件。而在註冊表的情況下,今天防病毒允許我添加/編輯/刪除密鑰?或者他們只監視某些鍵?另外,如果有人知道類/ lib來管理vC++中的配置設置(在純win32中),請發佈它。

回答

5

據我所知:

沒有足夠權限的用戶可能無法創建/寫配置文件

你應該能夠讓內部用戶的「家庭檔案目錄「或」應用程序數據「目錄,無論權限如何。通常這些目錄應該是可寫的。

將今天的殺毒軟件允許我添加/編輯/刪除密鑰?

從未見過我的殺毒軟件會干擾註冊表操作。只要你沒有在註冊表中做任何可疑的事情,你可能會好起來的。

哪種方式會更好?

是味道的問題。我認爲文本文件更好 - 可以更輕鬆地遷移設置。只是不要在卸載後留下垃圾。

另外,如果有人知道一個類/ lib目錄來管理VC配置設置++

中的Qt 4。但使用Qt的全部只是保存設置QSettings絕對是矯枉過正。你也可以檢查JSON等配置語言,使用lua進行設置(比使用Qt 4更少矯枉過正)或者獲取任何XML庫。另外,直接使用註冊表或使用iostreams或stdio編寫配置文件不應該很難。如果你喜歡它,你可以隨時編寫自己的配置庫。

+0

+1:「我認爲文本文件更好 - 允許更輕鬆地遷移設置」對於生產應用程序,這是非常重要的考慮因素。可以導出和導入註冊表配置單元,但用戶通常不會得到這些信息,而且您可能不希望他們混淆註冊表 – 2010-05-27 16:33:13

+0

這還取決於您要使用的語言。純C++不提供註冊表支持。閱讀和編寫文本文件都很困難。是的,你可以輕鬆地打開它們,但是如果你有大量的設置需要處理,解析和尋找值將成爲PITA。 如果你有訪問Win32/MFC/COM等,我會強烈建議去註冊表。讀取/寫入操作非常簡單,只需要幾行代碼。封裝在一個類中,你有一個非常優雅的可重用解決方案。 – Justin 2010-05-27 16:39:07

0

我認爲新的默認設置是在用戶的文件夾下的用戶的「AppData」文件夾中寫入一個配置文件,該文件夾應該可以安全地讀/寫。

我們使用一個簡單的XML格式文件來存儲設置;但您可以使用INI文件類型格式。

0

如果您將配置文件保存在應用程序數據目錄SHGetFolderPath()CSIDL_COMMON_APPDATA中,所有用戶將能夠看到配置。如果您使用CSIDL_LOCAL_APPDATA,則只有一個用戶能夠看到配置。註冊表不一定是保存所有配置數據的地方。

2

「僅限Windows」是限制還是限制解除?如果你不介意跨平臺,那麼我建議你給boost::program_options一試。該庫通過命令行,通過環境變量和INI文件支持程序選項。 Boost的program_options也很好地集成和粘貼了各種解析器與variables_map,您可以將它們視爲選項及其值之間的映射。

1

對於簡單的東西,你可能只是使用註冊表。但是,配置文件有很多優點...您可以針對應用程序的不同用途保存/加載多個不同的配置,在用戶或計算機之間共享或遷移設置更加簡單等。

如果您最終去文件路徑,我會建議Boost的屬性樹庫:

http://www.boost.org/doc/libs/1_41_0/doc/html/property_tree.html

它有一個相當不錯的語法:

boost::property_tree::ptree properties; 

std::string name = properties.get<std::string>("blah.name"); 
int score = properties.get<int>("blah.score"); 

properties.put("blah.name", "Inverse"); 
properties.put("blah.score", 1000); 

它還支持讀取和寫入各種格式,如XML和其他。