代码之家  ›  专栏  ›  技术社区  ›  Abgan

如何检查是否可以在MS XP/Vista的给定目录中创建文件?

  •  6
  • Abgan  · 技术社区  · 17 年前

    我有一个在用户指定的目录中创建文件的代码。用户可以指向一个无法创建文件的目录,但可以重命名该目录。

    我为测试目的创建了一个目录,我们称之为 C:\foo .

    C:\foo :

    • 遍历目录/执行文件
    • 删除子文件夹和文件
    • 读取权限
    • 更改权限

    C:\foo

    • 文件创建
    • 文件夹创建


    os.access('C:\foo', os.W_OK) == True

    st=os.stat('C:\foo')
    模式=st[统计模式]

    我相信这是因为我可以重命名文件夹,所以它对我来说是可变的。但这是内容——不是。

    文件创建

    编辑:对此类代码的需求源于“针对Windows Vista的认证”程序中的测试用例3,其中说明:

    1. 应用程序不得允许特权最低的用户将任何文件保存到Windows系统目录以通过此测试用例。

    这是否应理解为“应用程序可以尝试将文件保存在Windows系统目录中,但不应在失败时崩溃?”或者更确切地说是“应用程序在尝试保存文件之前必须执行安全检查”

    4 回复  |  直到 17 年前
        1
  •  4
  •   Ishmaeel    17 年前

    因此,如果我有这样一个场景,我会设计我的方法,在失败的情况下不丢失任何数据,继续尝试创建我的文件,并为用户提供一个选项,以更改所选目录,并在创建失败时重试。

        2
  •  4
  •   LeleDumbo    17 年前

    我最近编写了一个应用程序来通过一组测试,以从Microsoft获得ISV状态,我还添加了该条件。 我的理解是,如果用户的权限最小,那么他就没有在系统文件夹中写入的权限。所以我用以实玛利描述的方式来解决这个问题。我尝试创建文件并捕获异常,然后通知用户他没有将文件写入该目录的权限。

    据我所知,权限最低的用户将没有必要的权限写入这些文件夹,如果他有权限,那么他就不是权限最低的用户。

    我是否应该停止因为Windows Vista本身不允许特权最低的用户在%WINDIR%中保存任何文件而烦恼?

    在我看来?对

        3
  •  3
  •   Community Mohan Dere    9 年前

    我同意其他答案,即这样做的方法是尝试创建文件并捕获异常。

    然而 "Why does my application allow me to save files to the Windows and System32 folders in Vista?"

    为了避免这种情况,您必须明确告诉Vista您不需要管理权限,方法是在.exe的清单中包含相应的命令,请参阅上面链接的问题。

        4
  •  3
  •   nosklo    17 年前
    import os
    import tempfile
    
    def can_create_file(folder_path):
        try:
            tempfile.TemporaryFile(dir=folder_path)
            return True
        except OSError:
            return False
    
    def can_create_folder(folder_path):
        try:
            name = tempfile.mkdtemp(dir=folder_path)
            os.rmdir(name)
            return True
        except OSError:
            return False