5

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

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

但这对我不起作用。我究竟做错了什么?

4

2 回答 2

13

您的代码有两个问题,都与文件夹名称文字有关。该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 的系统错误代码。要在资源管理器中查看属性更改的结果,请确保启用其“显示隐藏文件”选项。

为了说明@Eryk Sun 在评论中所说的关于安排从字节字符串到 Unicode 的转换自动发生,您需要在调用函数以指定其参数的正确转换之前执行以下分配。@Eryk Sun 还解释了为什么这不是WWinAPI 函数版本中指向字符串的默认值 - 请参阅注释。

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)
于 2013-10-27T20:06:52.907 回答
1

试试这个代码:

import os
os.system("attrib +h " + "your file name")
于 2017-04-01T08:05:02.287 回答