我有一个路径(包括目录和文件名).
我需要测试文件名是否有效,例如,如果文件系统允许我创建具有这样名称的文件.
文件名中包含一些unicode字符.
可以安全地假设路径的目录段是有效且可访问的(我试图使问题更加适用,显然我太过分了).
除非必须,否则我非常不想逃避任何事情.
我发布了一些我正在处理的示例字符,但显然它们会被堆栈交换系统自动删除.无论如何,我想保留标准的unicode实体ö,并且只保留文件名中无效的东西.
这是捕获.可能(或可能不)已经是路径目标的文件.我需要保留该文件(如果它存在),如果不存在则不创建文件.
基本上我想检查是否可以写入路径而不实际打开写入路径(以及通常需要的自动文件创建/文件clobbering).
因此:
try:
open(filename, 'w')
except OSError:
# handle error here
Run Code Online (Sandbox Code Playgroud)
是不可接受的,因为它会覆盖我不想触摸的现有文件(如果它在那里),或者如果不存在则创建所述文件.
我知道我能做到:
if not os.access(filePath, os.W_OK):
try:
open(filePath, 'w').close()
os.unlink(filePath)
except OSError:
# handle error here
Run Code Online (Sandbox Code Playgroud)
但那会创建文件filePath,然后我必须这样做os.unlink.
最后,似乎花了6或7行来做一些应该简单os.isvalidpath(filePath)或类似的事情.
顺便说一下,我需要在(至少)Windows和MacOS上运行,所以我想避免特定于平台的东西.
``
我正在编写一个脚本来检查用户目录中文件的权限,如果它们不被接受,我会警告它们,但我想检查不仅是登录用户的权限,还要检查组和其他人的权限.我怎样才能做到这一点?在我看来,os.access()在Python中只能检查运行脚本的用户的权限.
我有一个代码,用于在用户指定的目录中创建文件.用户可以指向无法创建文件的目录,但可以重命名.
我已经为测试目的创建了目录,让我们调用它C:\foo.
我有以下权限C:\foo:
我没有以下任何权限C:\foo:
到目前为止,我尝试了以下方法:
os.access('C:\foo', os.W_OK) == True
st = os.stat('C:\foo')
mode = st[stat.ST_MODE]
mode & stat.S_IWRITE == True
C:\fooC:\foo
我相信这是因为我可以重命名文件夹,所以它对我来说是多变的.但它的内容 - 不是.
有没有人知道如果当前用户有权在该目录中创建文件,我如何编写将检查给定目录的代码?
简而言之 - 我想检查当前用户是否具有给定文件夹名称的文件创建和文件夹创建权限.
编辑:需要这些代码来自'Certified for Windows Vista'计划的第3号测试案例,其中指出:
- 应用程序不得允许Least-Privileged用户将任何文件保存到Windows系统目录以通过此测试用例.
这应该被理解为"应用程序可能会尝试在Windows系统目录中保存文件,但不应该在失败时崩溃吗?" 或者更确切地说"应用程序必须在尝试保存文件之前执行安全检查?"
我是否应该因为Windows Vista本身不允许Least-Privileged用户在%WINDIR%中保存任何文件而停止打扰?