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

时间:2013-10-27 19:01:05

标签: python windows hide ctypes

尝试隐藏文件夹但未成功。我发现了这个:

import ctypes
ctypes.windll.kernel32.SetFileAttributesW('G:\Dir\folder1', 2)

但它对我不起作用。我做错了什么?

2 个答案:

答案 0 :(得分: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()

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

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

ctypes.windll.kernel32.SetFileAttributesW.argtypes = (
    ctypes.c_wchar_p, ctypes.c_uint32)

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

ret = ctypes.windll.kernel32.SetFileAttributesW(r'G:\Dir\folder1',
                                                FILE_ATTRIBUTE_HIDDEN)

答案 1 :(得分:0)

试试这段代码:

import os
os.system("attrib +h " + "your file name")