【问题标题】:Where to save application data in windows?windows 应用程序数据保存在哪里?
【发布时间】:2021-03-21 19:10:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: windows pyqt software-design application-data


    【解决方案1】:

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

    有很多地方可以根据情况存储“程序数据”,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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-22
      • 2017-04-02
      • 1970-01-01
      • 2022-11-11
      • 2010-09-08
      • 2013-06-19
      • 2022-08-12
      • 1970-01-01
      相关资源
      最近更新 更多