任何 Windows 机器上的可写目录
Writeable directory on any Windows machine
我有一个基本的 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 上的此类目录通常由 well-known 环境变量引用。您的问题并不完全清楚您是要写入持久数据还是临时数据,以及您是否希望一个用户写入的数据可见and/or 可由另一个用户修改。
如果数据是临时的,则使用 TEMP
环境变量引用的目录。
用户私有的数据通常会写入 APPDATA
(随用户漫游)或 LOCALAPPDATA
(机器本地)环境变量引用的目录。
要在 用户之间共享的数据应该写在什么地方可能不太清楚。一种选择可能是 PUBLIC
环境变量引用的 public 用户目录中的某处。在那里写入的文件归最初创建它们的用户所有,但默认的继承权限允许其他交互式用户修改它们。
Windows 提供几个 "special" locations 文件存储位置。
如果您需要写入文件,您通常会选择其中之一:
CSIDL_APPDATA
漫游到 NT 域中不同计算机的文件。适用于配置文件。也可用作 %AppData%
环境变量。
CSIDL_LOCAL_APPDATA
永不漫游的文件。适用于缓存和其他不重要或可以自动重新生成的东西。也可用 %LocalAppData%
.
CSIDL_PERSONAL
文档。不要在此处存储配置文件。
%Public%
一台机器上所有用户共享的文件夹。
%Temp%
临时目录。仅可用作环境变量。
有关在 Python 中检索这些内容的方法,请参阅 this question。
我有一个基本的 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 上的此类目录通常由 well-known 环境变量引用。您的问题并不完全清楚您是要写入持久数据还是临时数据,以及您是否希望一个用户写入的数据可见and/or 可由另一个用户修改。
如果数据是临时的,则使用 TEMP
环境变量引用的目录。
用户私有的数据通常会写入 APPDATA
(随用户漫游)或 LOCALAPPDATA
(机器本地)环境变量引用的目录。
要在 用户之间共享的数据应该写在什么地方可能不太清楚。一种选择可能是 PUBLIC
环境变量引用的 public 用户目录中的某处。在那里写入的文件归最初创建它们的用户所有,但默认的继承权限允许其他交互式用户修改它们。
Windows 提供几个 "special" locations 文件存储位置。
如果您需要写入文件,您通常会选择其中之一:
CSIDL_APPDATA
漫游到 NT 域中不同计算机的文件。适用于配置文件。也可用作%AppData%
环境变量。CSIDL_LOCAL_APPDATA
永不漫游的文件。适用于缓存和其他不重要或可以自动重新生成的东西。也可用%LocalAppData%
.CSIDL_PERSONAL
文档。不要在此处存储配置文件。%Public%
一台机器上所有用户共享的文件夹。%Temp%
临时目录。仅可用作环境变量。
有关在 Python 中检索这些内容的方法,请参阅 this question。