2008-10-16 84 views
7

什麼是存儲應用程序設置的一種相當標準的方式,主要用於Windows,但也易於轉移到其他平臺。應用程序設置

有基本上4組設置,我想有:

  • 全局設置,影響所有用戶,並可以機器之間移動
  • 全局系統設置,影響所有用戶,但具體到該系統(例如默認設置該系統中,例如,圖形選項)
  • 用戶設置,特定於該系統被系統之間移動的用戶設置(例如音量)
  • 用戶系統設置,用戶設置(例如,圖形選項是依賴於硬件的)

每個級別都會覆蓋以前的級別,允許應用程序默認使用「全局設置」,並且用戶設置存儲用戶選擇的選項。 前兩個基本上是沒有用戶設置的默認設置(例如對於新用戶)。

我認爲實現了一套功能,然後我可以爲不同的系統實現(可能通過ini文件),但這是最好的方法嗎?

(C++)

namespace config 
{ 
    void Init(const std::string &AppName); 
    //updates config for keys/sections that don't exist (ie don't overwrite changes by advanced users by rewriting the entire file) 
    void Defaults   (std::map<std::string,std::map<std::string,std::string> > &Map); 
    void SystemDefaults (std::map<std::string,std::map<std::string,std::string> > &Map); 

    void Set    (const std::string &Section, const std::string &Key, const std::string &Value); 
    void SetSystem   (const std::string &Section, const std::string &Key, const std::string &Value); 

    void SetUser   (const std::string &Section, const std::string &Key, const std::string &Value); 
    void SetUserSystem  (const std::string &Section, const std::string &Key, const std::string &Value); 

    std::string GetValue (const std::string &Section, const std::string &Key); 
} 

我知道Windows有一組這樣的設置目錄,但這些都是正確的迪爾斯我的需求?

編輯:我寧願去與文件(ini或xml),而不是使用說窗戶註冊。然而wheres最好的地方把這些配置文件在每個操作系統下?

在Vista下,我發現這些,這似乎適合我的團體,但什麼更舊的Windows版本(我需要支持win2000,XP等),並沒有Mac/Linux有自己的simelar文件夾?

  • 全局設置 - <SYSDRIVE> \ USERS \ DEFAULT \應用程序數據\漫遊
  • 全局系統設置 - <SYSDRIVE> \ USERS \ DEFAULT \應用程序數據\本地
  • 用戶設置 - <SYSDRIVE> \用戶\ <USER> \應用程序數據\漫遊
  • 用戶的系統設置 - <SYSDRIVE> \用戶\ USER < > \應用程序數據\本地

回答

1

有(至少)三個合理選擇:

註冊地:這是我最不喜歡的,因爲便攜性和相對不透明度的。

環境變量:我建議使用一個(只有一個)指向您的材料保存的地方 - 「安裝目錄」或其他。

文件:一個/用戶主目錄(或其子目錄)和項目/產品目錄都適用於存儲事物。

您可能想要使用簡單的關鍵字=值範例和基本規則,以便您的變量設置可以非常容易地被多種類型的代碼讀取。例如,我通常對屬性文件使用Java範例,並使用匹配的行爲C代碼,因此我的代碼行都可以輕鬆讀取設置。

+0

井文件是我最喜歡的方式,因爲相同的東西將在所有平臺上工作很少work.The主要問題是文件應該在哪裏,以及如何提供一個乾淨的界面(例如,微軟似乎並不需要應用程序在應用程序自己的目錄中處理文件... id很滿意%username%.ini)。 – 2008-10-16 13:33:00

6

如果你是一個提升的用戶,你可能需要看看program options庫,它支持使用配置文件以及環境變量和(當然)命令行選項。

它被設計爲便攜式,所以應該緩解您的跨平臺頭痛。