在Windows操作系统中的文件夹上设置"隐藏"属性?

iRe*_*Rex 2 python windows ctypes hide

试图隐藏文件夹但没有成功.我发现了这个:

import ctypes
ctypes.windll.kernel32.SetFileAttributesW('G:\Dir\folder1', 2)
Run Code Online (Sandbox Code Playgroud)

但它对我不起作用.我究竟做错了什么?

mar*_*eau 9

您的代码有两个问题,都与文件夹名称文字有关.该SetFileAttributesW()函数需要Unicode字符串参数.您可以通过在字符串前添加字符来指定其中一个u.其次,字符串中的任何文字反斜杠字符都必须加倍,或者你也可以[也]添加一个r前缀.在下面的代码中使用双前缀.

import ctypes
FILE_ATTRIBUTE_HIDDEN = 0x02

ret = ctypes.windll.kernel32.SetFileAttributesW(ur'G:\Dir\folder1',
                                                FILE_ATTRIBUTE_HIDDEN)
if ret:
    print('attribute set to Hidden')
else:  # return code of zero indicates failure -- raise a Windows error
    raise ctypes.WinError()
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到Windows的系统错误代码.要在资源管理器中查看属性更改的结果,请确保未启用其"显示隐藏文件"选项.

为了说明@eryksun在关于安排从字节字符串自动转换为Unicode的注释中所说的内容,您需要调用函数之前执行以下操作以指定其参数的正确转换.@eryksun还解释了为什么这不是WWinAPI函数版本中指针到字符串的默认值- 请参阅注释.

ctypes.windll.kernel32.SetFileAttributesW.argtypes = (
    ctypes.c_wchar_p, ctypes.c_uint32)
Run Code Online (Sandbox Code Playgroud)

然后,这将工作(请注意,r由于反斜杠仍然需要前缀):

ret = ctypes.windll.kernel32.SetFileAttributesW(r'G:\Dir\folder1',
                                                FILE_ATTRIBUTE_HIDDEN)
Run Code Online (Sandbox Code Playgroud)

  • 如果调用失败只是`raise ctypes.WinError()`.`WinError()`函数默认使用`ctypes.GetLastError`和`ctypes.FormatError`来返回`WindowsError`异常. (2认同)