任何Windows计算机上的可写目录



我有一个基本的Windows问题。我是Linux用户,但我负责一个需要在Windows文件系统上操作的程序。

我正在寻找一个安全、通用的高级目录列表,在这些目录中,任何Python程序都可以在任何Windows机器上创建目录和文件。

当我们尝试在底部运行代码时,将抛出以下错误消息。

PermissionError: [WinError 5] Access is denied: 'C:\Program Files\arbitrary'

引发上述错误的代码是:

import os
import platform
cwd = os.getcwd()
platform.system()
print("cwd is: ", cwd)
if platform.system() == 'Windows':
print('W!')
drive = cwd.split(':\')[0] + ':\'
print('drive is: ', drive)
newpath = drive+'Program Files\arbitrary' 
print('newpath is: ', newpath)
if not os.path.exists(newpath):
os.makedirs(newpath)

显然,我们的程序没有写入Program Files目录的权限。

但是,我们不需要要求我们的用户对任何给定的目录拥有权限,而是需要让程序指定写入一个目录,该目录保证任何可以运行该程序的用户都可以写入。

Windows上的此类目录通常由众所周知的环境变量引用。从你的问题中还不完全清楚你是想写持久数据还是临时数据,以及你是否希望一个用户写的数据被另一个用户看到和/或修改。

如果数据是临时的,则使用TEMP环境变量引用的目录。

用户专用的数据通常会写入APPDATA(与用户一起漫游(或LOCALAPPDATA(机器本地(环境变量所引用的目录。

可能不太清楚用户之间共享的数据应该写在哪里。一个选项可能是PUBLIC环境变量引用的公共用户目录中的某个位置。在那里写入的文件由最初创建它们的用户所有,但默认继承的权限允许其他交互式用户修改它们。

Windows提供了几个"特别的";存储文件的位置。

如果你需要写入文件,你通常会选择其中一个:

  • CSIDL_APPDATA漫游到NT域中不同计算机的文件。适用于配置文件。也可用作%AppData%环境变量
  • CSIDL_LOCAL_APPDATA从不漫游的文件。适用于缓存和其他不重要或可以自动重新生成的内容。也可用作%LocalAppData%
  • CSIDL_PERSONAL文件。不要在此处存储配置文件
  • %Public%计算机上所有用户共享的文件夹
  • %Temp%临时目录。仅作为环境变量可用

有关在Python中检索这些内容的方法,请参阅此问题。

相关内容

最新更新