适用于Windows上我的应用程序缓存的位置

问题描述:

我的应用程序将一些数据缓存在磁盘上。由于缓存可能很大,因此不应将其存储在网络驱动器上。它应该在应用程序的调用之间持续存在。我有一个用户选择位置的机制,但是希望默认设置对于平台来说是明智的和“正确的”。适用于Windows上我的应用程序缓存的位置

此类缓存的适当位置是什么?是否有确定适当位置的API?我如何从Python中调用它?

看看这里:http://en.wikipedia.org/wiki/Environment_variable#User_management_variables。用户目录下的任何内容都很好。如果它适用于所有用户,那么它应该是:%ALLUSERSPROFILE%。如果它对于特定的用户,请确保权限是正确的。

查看MSDN了解更多关于其他Windows版本的信息。环境变量因系统而异。

+0

我正在阅读的是,对于普通用户,%ALLUSERSPROFILE%文件夹是只读的。不确定,但这就是人们所说的... – paul 2010-01-27 10:09:23

也许tempfile模块提供了你所需要的。它使用Windows Temp目录(可能不在网络驱动器上),但如果需要,可以指定一个目录。同样出于安全原因,这个模块应该是正确的工具 - 如果您使用tempfile.mkstemp(),则该文件仅可通过创建用户标识进行读写。

哦。我看到你刚刚编辑了你的问题,并且你需要在应用程序的调用之间进行文件持久化。然后tempfile不是那么理想(即使您可以选择不在调用之间删除缓存)。

该应用程序是否有用户可以指定的任何首选项,设置或选项?如果是这样,请在用户可以指定数据位置的位置添加一个选项,并使用默认的当前Windows临时目录。

在临时目录驱动器上可能没有足够的空间,并且需要使用其他驱动器/目录。

有一些地方可以把你的应用程序文件放在Windows中。 This page显示一个列表(这个枚举是.Net特定的,但大多数特殊文件夹在Windows上是标准的)。基本上你需要决定你是否需要每个用户的缓存,只适用于本地机器,每个应用程序或共享等。

我没有太多的python经验,所以我不能专门帮助如何获得这些路径,但我相信这里有更多的知识可以。

%APPDATA%(当前用户)或%ALLUSERSPROFILE%(所有用户)环境变量引用了Windows应用程序存储其(永久)应用程序数据的标准位置。您可以使用例如(只有简单而不是非常优雅的错误检查!):

import os 
app_path = os.getenv("APPDATA") + "\\MyApplicationData" 
try: 
    os.mkdir(app_path) 
except WindowsError: 
    # already exists 

现在你有你自己的应用程序目录。

wx.StandardPaths模块包含返回文件系统中各种标准位置的方法,并且透明地尝试在Unix,Mac OS X和Windows下执行“正确的事情”。