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

时间:2008-11-20 15:28:27

标签: python windows

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

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

7 个答案:

答案 0 :(得分:3)

您可以将应用程序文件放在Windows中。 This page显示一个列表(此枚举是.Net特定的,但大多数特殊文件夹在Windows上是标准的)。基本上,您需要确定每个用户是否需要缓存,仅针对本地计算机,每个应用程序或共享等等。

我对python没有多少经验,所以我不能特别帮助如何获得这些路径,但我相信这里有更多知识渊博的人可以。

答案 1 :(得分:2)

Windows应用程序存储其(永久)应用程序数据的标准位置由%APPDATA%(当前用户)或%ALLUSERSPROFILE%(所有用户)环境变量引用。您可以使用以下方式访问它们: (只有基本的,不是非常优雅的错误检查!):

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

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

答案 2 :(得分:2)

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

查看MSDN以获取有关其他Windows版本的更多信息。环境变量因系统而异。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

一个方便的包是 appdirs,它支持 Windows 和大多数其他操作系统。例如,为“作者”发布的“MyApp”版本1.0创建缓存目录是:

import os
from appdirs import user_cache_dir

dirname = user_cache_dir("AppName", "Author", "v1.0")
# C:\Users\username\AppData\Local\Author\AppName\Cache\v1.0

# create it, if it doesn't exist
os.makedirs(dirname, exist_ok=True)