Windows下Python设置文件隐藏后无法写入的技术问题咨询
解决Windows下设置文件隐藏属性后无法写入的问题
你的问题出在调用SetFileAttributesW时直接覆盖了文件的全部属性,而非在原有属性基础上叠加隐藏属性。
Windows的SetFileAttributesW函数第二个参数是文件的完整属性集合,不是单独要添加的属性。直接传0x02(仅隐藏属性)会清除文件原本的其他关键属性(比如存档属性0x20),导致系统判定文件权限不足,从而无法写入。
修正方案:保留原有属性,叠加隐藏属性
先获取文件当前的属性,再通过按位或操作叠加隐藏属性,最后设置回去:
import ctypes # 定义属性常量 FILE_ATTRIBUTE_HIDDEN = 0x02 # 获取文件当前属性 current_attrs = ctypes.windll.kernel32.GetFileAttributesW("test.txt") if current_attrs == -1: raise RuntimeError("获取文件属性失败") # 叠加隐藏属性(保留原有所有属性) updated_attrs = current_attrs | FILE_ATTRIBUTE_HIDDEN # 设置新的属性集合 ctypes.windll.kernel32.SetFileAttributesW("test.txt", updated_attrs) # 测试读写操作 with open("test.txt", "r") as f: print('读取成功') with open("test.txt", "w") as f: print('写入成功')
补充说明
如果需要同时设置隐藏和存档属性,同样要基于原有属性叠加,而不是直接传0x22:
FILE_ATTRIBUTE_ARCHIVE = 0x20 updated_attrs = current_attrs | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_ARCHIVE
这种方式会保留文件原本的所有属性,仅添加你需要的隐藏(或存档)属性,就能保证文件正常读写。
内容的提问来源于stack exchange,提问作者dimimir




