0

我正在尝试制作一个 Windows 应用程序。在此应用程序中,某些文件会随着用户添加或删除条目而被修改。我将这些文件保存在应用程序文件夹本身。但是在制作二进制文件后我安装了它,当我尝试添加一个条目时它会崩溃。

所以,我想通了这个问题。Windows 不允许修改 C:\Program Files 中的文件。所以,我将它安装在其他驱动器中并且它可以工作。它暂时解决了我的问题,但我想知道其他应用程序在 Windows 中是如何工作的。

这些应用程序将数据保存在哪里?我不是在谈论一些保存在“文档”中的数据,而是在每次用户进行更改(如主题、甲酸盐)时都必须修改的内容。

4

1 回答 1

0

不允许用户访问“程序文件夹”,这是好的:它是一个系统文件夹,只能用于与系统相关的操作(如安装或卸载程序)。

有很多地方可以根据情况存储“程序数据”,QStandardPaths根据类别位置提供对其路径的访问。您可能感兴趣的是:

  • ConfigLocation:返回应写入用户特定配置文件的目录位置。这可能是通用值或特定于应用程序的值,并且返回的路径永远不会为空。
  • AppDataLocation:返回可以存储持久应用程序数据的目录位置。这是一个特定于应用程序的目录。
  • AppLocalDataLocation: 与前一个一样,但特定于 Windows。
  • AppConfigLocation:返回应写入用户特定配置文件的目录位置。这是一个特定于应用程序的目录,返回的路径永远不会为空。

可以使用以下静态方法访问这些路径(以及文档中列出的其他路径):

如果您需要存储用户配置,您可以使用QStandardPaths.writableLocation(AppConfigLocation),而如果您有一些应用程序使用的特定于用户的内部数据(电子邮件数据库、文档模板等)QStandardPaths.writableLocation(AppLocalDataLocation)应该是一个不错的选择。

在这两种情况下,这些路径可能不存在,因此您需要确保并最终创建它们,可能通过使用QDir(path)

    dataPath = QtCore.QStandardPaths.writableLocation(AppLocalDataLocation)
    dataPathDir = QtCore.QDir(dataPath)
    if not dataPathDir.exists():
        # create the directory (including parent directories if they don't exist);
        # that the argument of mkpath is relative to the QDir's object path, so
        # using '.' means that it will create the actual dataPath
        dataPathDir.mkpath('.')

请注意,对于上述所有内容(尤其是最后 3 个),您需要正确设置organizationName applicationName

于 2020-12-10T12:01:54.337 回答