Python跨平台隐藏文件
在*nix中,我可以简单地向文件添加一个Python跨平台隐藏文件,python,Python,在*nix中,我可以简单地向文件添加一个,使其“隐藏”。还有一些方法可以使文件隐藏在windows中 python中有没有一种方法可以跨平台隐藏文件 目前: def write_hidden(file_name, data): file_name = '.' + file_name with open(file_name_, 'w') as f: f.write(data) 但正如我所说,这只适用于*nix系统。您可以这样做: import os import
,使其“隐藏”。还有一些方法可以使文件隐藏在windows中
python中有没有一种方法可以跨平台隐藏文件
目前:
def write_hidden(file_name, data):
file_name = '.' + file_name
with open(file_name_, 'w') as f:
f.write(data)
但正如我所说,这只适用于*nix系统。您可以这样做:
import os
import ctypes
FILE_ATTRIBUTE_HIDDEN = 0x02
def write_hidden(file_name, data):
"""
Cross platform hidden file writer.
"""
# For *nix add a '.' prefix.
prefix = '.' if os.name != 'nt' else ''
file_name = prefix + file_name
# Write file.
with open(file_name, 'w') as f:
f.write(data)
# For windows set file attribute.
if os.name == 'nt':
ret = ctypes.windll.kernel32.SetFileAttributesW(file_name,
FILE_ATTRIBUTE_HIDDEN)
if not ret: # There was an error.
raise ctypes.WinError()
这还没有经过测试,但应该可以正常工作
此外,您可能希望看到帮助我实现这一目标的其他问题:
ctypes.windl
。它缓存函数指针,其他库可能定义了不兼容的原型(即restype
、argtypes
、和errcheck
)。此外,为了可靠性,您需要使用线程本地捕获的最后一个错误值。此外,您正在删除现有的文件属性。下面是考虑这些观察结果的示例代码:kernel32=ctypes.windell('kernel32',use\u last\u error=True)代码>无效的\u文件\u属性=-1代码>文件属性隐藏=2
attrs=kernel32.GetFileAttributesW(文件名)
<代码>如果属性==-1:引发ctypes.WinError(ctypes.get\u last\u error())
<代码>属性|=文件属性_隐藏
if not kernel32.SetFileAttributesW(filename,attrs):引发ctypes.WinError(ctypes.get\u last\u error())
。