【问题标题】:Obtaining cross-platform path for config file (C/C++)获取配置文件的跨平台路径(C/C++)
【发布时间】:2010-12-20 03:26:03
【问题描述】:

我想将应用程序的设置存储在配置文件中。在 Linux(和 Mac?)下(可能)是 /home/user/.config/app.conf,而在 Windows 下(可能)是“C:\Documents and Settings\username\Application Data\app.conf”。它当然可以存储在其他地方,因此获得正确位置的唯一方法是使用特定于平台的函数。

我只想说我不想冒险自己编写代码并出错(因为我无法访问其中一些平台进行测试),所以有人知道是否有任何经过良好测试的跨平台 C /C++ 库可以做到这一点吗?使用一堆#defines 的 .h/.hpp 文件也可以,只要它被广泛使用。

我认为 Boost 的程序选项库可能能够(因为它可以加载配置文件),但它似乎不能。

有什么建议吗?

【问题讨论】:

    标签: c++ cross-platform configuration-files


    【解决方案1】:

    这又出现了,所以我决定硬着头皮创建自己的解决方案,因为现有的唯一解决方案是大型框架的一部分,对于小型程序来说是不切实际的。

    我已经在https://github.com/Malvineous/cfgpath发布了代码

    它被放置在公共领域,任何人都可以出于任何目的免费使用。它没有超出标准平台 API 的依赖项。只需#include 一个.h 文件并调用其中一个函数。存储库中的其他文件只是测试代码,你不需要这些,除非你想做出你打算发送给我的更改(请做!)

    不幸的是,正如我在原始帖子中所说,我无法轻松访问许多平台,所以我希望我能获得一些补丁来增加对更多平台的支持。

    【讨论】:

      【解决方案2】:

      Qt 的QSettings 类将为您完成此操作。

      在 *nix 上,设置将存储在 $HOME/.config 中。在 Windows 上,设置将存储在注册表中。在 Mac 上,设置将存储在 $HOME/Library/Preferences/ 中。

      【讨论】:

      【解决方案3】:

      wxWidgets 有一个你可以调用的函数来获取它,但是对于 Unix,它有点过时了,因为它返回主目录而不是更常见的 ~/.config

      见: https://docs.wxwidgets.org/3.0/classwx_standard_paths.html#a7c7cf595d94d29147360d031647476b0 https://github.com/wxWidgets/wxWidgets/issues/9300

      【讨论】:

        【解决方案4】:

        我认为boost filesystem libraries 应该会有所帮助。它具有独立于平台的路径语法。

        【讨论】:

        • 我用什么语法在Linux下会显示为/home/user/.config,而在Windows下会自动变成C:\Documents and Settings\username\App Data?
        • 亲爱的主,boost 仅用于查找主目录?谈论矫枉过正。我不想成为必须在 MinGW 中编译它的人。
        猜你喜欢
        • 2011-07-31
        • 1970-01-01
        • 2011-10-05
        • 2010-09-12
        • 2014-06-09
        • 2016-06-06
        • 1970-01-01
        • 2014-10-15
        • 1970-01-01
        相关资源
        最近更新 更多