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

Posted

技术标签:

【中文标题】在 Windows 操作系统中的文件夹上设置“隐藏”属性?【英文标题】:Set "hide" attribute on folders in windows OS? 【发布时间】:2013-11-06 11:28:06 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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)

【讨论】:

当然这可以在没有原始 win32 的情况下以独立于平台的方式完成 大卫赫弗南,怎么样?如果不是秘密? :) 再问一个问题 - 为什么是 0x02 而不仅仅是 2? 我这样写是因为有一个bunch of other ones 对应于不同的位,并且在十六进制中更容易看到十进制。如果您认为值得,请考虑对我的回答进行投票。 如果调用失败,只需raise ctypes.WinError()WinError() 函数默认使用ctypes.GetLastErrorctypes.FormatError 来返回WindowsError 异常。【参考方案2】:

试试这个代码:

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

【讨论】:

投反对票,因为这包含明显的外壳注入

以上是关于在 Windows 操作系统中的文件夹上设置“隐藏”属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 上隐藏文件?

windows如何查看删除记录

如何在 C# 中的文件上设置清除属性“X”?

nginx网页优化 上

Mac os系统下隐藏移动硬盘上的文件夹该如何操作?

windows/tasks文件夹里的文件怎么查看