【问题标题】:Where do I store cross platform C++ app storage?我在哪里存储跨平台 C++ 应用程序存储?
【发布时间】:2020-10-04 20:30:53
【问题描述】:

我想在本地存储千兆字节的媒体 - 并在卸载应用程序时自动删除它们。我找到了this question,但它需要 qt 库,并且只存储应用程序设置。

我猜在 Windows、Mac 和 Linux 上都有一个惯例。是否有任何std 帮助程序 - 或类似的 - 用于存储应用程序数据,跨平台。

如果没有,我需要在每个平台上存储这些路径是否有约定?我计划为每个操作系统创建一个安装程序,因此了解这些路径会很有用,这样我就可以在此处安装其他数据。

【问题讨论】:

  • 不,C++ 库中没有这方面的内容。
  • Linux 更复杂。你有不同的包管理器,比如 rpm、dnf、yum、apt、dpkg、pacman、yast、apm 等等。此外还有跨 Linux 包管理器,如 snap、flatpak 和 appimage。即使有Filesystem Hierarchy Standard,不同发行版上的文件夹结构也可能不同
  • 您有两个跨平台问题:(1) 确定存储大量应用程序数据的正确位置,以及 (2) 如何挂钩卸载过程以清理它。这两个都是系统特定的。像 Qt 这样的框架已经完成了为每个系统找出正确答案的工作,并在您调用它们的通用接口时这样做。 Qt 也有一个安装程序系统,CMake 的 CPack 也可能有帮助,但我没有针对您的特定用例尝试过它们。因此,您可以采用一些帮助解决此类问题的助手,也可以自己动手,这在任何地方都很难测试。

标签: c++ installation operating-system cross-platform


【解决方案1】:

我想在本地存储千兆字节的媒体 - 并在卸载应用时自动删除它们。

普通但熟练的用户能够将媒体复制到其他地方,并且会定期备份他的磁盘。

但是,大多数 C++ 程序都有一个main 接受程序参数,您可以按照惯例提供程序参数来删除数据。请务必正确记录您的设计。

this answer。在 Unix 或 POSIX 系统(Linux、MacOSX、FreeBSD....)上,您可以接受 --clean-all-the-mess 程序选项。

我猜在 Windows、Mac 和 Linux 上都有一个惯例。

据我所知,这个猜测是错误的。(事情要复杂得多

更一般地,阅读package managers。其中有很多。请参阅guix 获取一个有趣的示例。 DebianFedora 有不同的。查看GNU stowautoconf

您可能想要使用数据库,可能是SQLitePostGreSQL

在 Linux 上,另请参阅 Advanced Linux Programmingsyscalls(2) 以及有关 systemd 的更多信息。

在 Windows 上,阅读WinAPI

我需要存储这些路径是否有约定

Linux 有 hier(7),但一些 Linux 发行版(包括 Android)不遵循这一点。

我的建议:研究一些open source软件的C++代码接近你的目标。您可以在 githubgitlabSoftwareHeritage 上找到其中一些。另见POCO

【讨论】:

    【解决方案2】:

    “应用程序卸载”事件对操作系统可见,因此最好的办法是找到一些特定于操作系统的挂钩来注册回调以自行删除本地文件。

    编辑: C++ STL 是一段代码(库),用于编写在某些操作系统上运行的应用程序,因此 STL 不是查找应用程序安装/卸载事件(即操作系统级事件)的地方。但是没有什么能阻止您为任何操作系统编写卸载程序。问题是由谁或如何以及何时执行。

    【讨论】:

    • 此应用程序卸载事件在 Linux 中的位置在哪里?
    • 我不是 linux 程序员,但如果您关心 linux,恕我直言,它通过其包管理器将所有应用程序作为包管理。因此,要为您的应用程序提供这样的功能,您需要让这些程序包管理器列出您的应用程序。如何?我不知道,但请尝试谷歌搜索并阅读有关 PPA(个人包存档)的信息。
    • 所以这是评论而不是答案
    • 对于上述三个操作系统(Windows、Linux、Mac),您有一个通常的文件系统层次结构。您可以回答 “如果没有,我需要在每个平台上存储这些路径是否有约定?”
    • @ThomasSablik,我已经明白你不喜欢我的回答的观点,但我对此很满意。谢谢。
    猜你喜欢
    • 2015-09-23
    • 2011-11-18
    • 2010-11-06
    • 2010-09-08
    • 2013-11-20
    • 2021-05-03
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    相关资源
    最近更新 更多