You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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

火山引擎 最新活动