【问题标题】:Cross platform way of Accessing Config dir访问配置目录的跨平台方式
【发布时间】:2011-10-21 16:03:29
【问题描述】:

是否有任何跨平台方法可以找出我的应用程序配置应该是哪个目录?

例如,Mozilla Firefox 在 linux 上使用 /home/user/.mozilla,在 Windows 上使用 %APPDATA%\Mozilla。 http://kb.mozillazine.org/Profile_folder_-_Firefox#Navigating_to_the_profile_folder

是否有任何库可以处理它,或者只是很多#ifdef?

【问题讨论】:

    标签: c++ windows linux


    【解决方案1】:

    恐怕您必须采用#ifdef 方式,还没有听说/看到任何lib 这样做。

    【讨论】:

      【解决方案2】:

      Mozilla 是一个旧应用程序,它的配置保存在 $HOME/.mozilla 中已经有一段时间了。但是,鼓励新应用程序将配置文件存储在 $HOME/.config/myappname 中。

      我假设大多数通用跨平台库都有获取基本配置目录的方法(通常是 Linux 上的 $HOME/.config/ 和 Windows 上的 %APPDATA)。例如,GLib 有 g_get_user_config_dir() ,您需要做的就是将您的应用名称附加到结果中(未经测试的代码):

      gchar *
      myapp_get_config_dir ()
      {
          const gchar *user_config_dir;
          gchar *my_config_dir;
      
          user_config_dir = g_get_user_config_dir ();
          my_config_dir = g_build_filename (user_config_dir, "myappname", NULL);
      
          return my_config_dir;
      }
      

      【讨论】:

      • 你知道除了Glib还有其他选择吗? Glib 不是我想要的依赖项...
      • 为什么不呢?这是一个非常小的库,具有最少的依赖关系,并且对编写干净的跨平台代码有很大帮助。关于其他选项 -- Qt 有一个完整的配置保存类:doc.qt.nokia.com/stable/qsettings.html,它还有一个跨平台获取主目录的方法:doc.qt.nokia.com/stable/qdir.html#homePath
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 2018-09-28
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      • 2017-08-11
      相关资源
      最近更新 更多