我正在尝试使用 Python 在 Windows 中创建一个隐藏文件,但隐藏后就无法写入了。不过,可以读取此文件。
import ctypes
with open("test.txt", "r") as f: print('test')
ctypes.windll.kernel32.SetFileAttributesW("test.txt", 0x02) # adding h (hidden) attribute to a file
with open("test.txt", "r") as f: print('test') # works
with open("test.txt", "w") as f: print('test') # error
错误:
Traceback (most recent call last):
File "C:\Users\user\Documents\client\test.py", line 8, in <module>
with open("test.txt", "w") as f: print('test') # error
PermissionError: [Errno 13] Permission denied: 'test.txt'
使用0x22
(即a
属性和h
属性) 而0x02
不是 没用。还是会出现同样的错误。通过 使文件再次可见后,attrib -H test.txt
就可以以写入模式打开它了。不过,据我所知,隐藏文件在 Windows 中应该是可写的。
操作系统:Windows 11
Python版本:Python 3.10.2
UPD:发现一个问题,似乎它可能会导致您描述的错误youtrack.jetbrains.com/issue/RSRP-287503
尝试
|
组合属性而不是重写它们我还没有看到关于这种行为的具体 Python 文档,但我相信这是因为在实现级别,最终调用的是带有以下注释的
'w'
Windows API :CreateFileW
打开以进行写入
mode='w'
最终将使用带有 FILE_ATTRIBUTE_NORMAL 的 CREATE_ALWAYS 并会返回拒绝访问;而打开以进行读取和更新mode='r+'
或附加mode='a'
将会起作用,因为将使用 OPEN_EXISTING。下面用Python进行演示:
输出:
命令提示符的工作方式相同: