使用pywin32修改Windows下MP4文件属性遇权限拒绝错误求助
解决pywin32修改MP4属性时的"Access Denied"错误
你遇到的Access Denied错误是因为默认调用SHGetPropertyStoreFromParsingName时,属性存储处于只读模式,无法执行写入操作。要解决这个问题,需要在获取属性存储时显式指定读写权限。
解决方案步骤:
- 初始化COM环境(确保win32com组件正常工作)
- 获取属性存储时传入
GPS_READWRITE标志,开启读写权限
修改后的完整代码:
import pythoncom import os from win32com.propsys import propsys # 初始化COM环境 pythoncom.CoInitialize() file_path = os.path.abspath('file.mp4') pk = propsys.PSGetPropertyKeyFromName("System.Title") # 传入GPS_READWRITE标志,获取可读写的属性存储 ps = propsys.SHGetPropertyStoreFromParsingName( file_path, None, propsys.GPS_READWRITE, propsys.IID_IPropertyStore ) # 读取原有属性 details = ps.GetValue(pk).GetValue() print(f"原有Title属性:{details}") # 设置新属性值 newValue = propsys.PROPVARIANTType('ok') ps.SetValue(pk, newValue) ps.Commit() print("属性修改成功") # 验证修改结果 ps_refresh = propsys.SHGetPropertyStoreFromParsingName( file_path, None, propsys.GPS_READWRITE, propsys.IID_IPropertyStore ) updated_details = ps_refresh.GetValue(pk).GetValue() print(f"修改后的Title属性:{updated_details}") # 释放COM资源 pythoncom.CoUninitialize()
关键说明:
- COM初始化:
pythoncom.CoInitialize()是win32com操作的必要步骤,确保COM组件正确初始化;操作完成后用CoUninitialize()释放资源。 - 读写权限标志:
propsys.GPS_READWRITE是Windows属性系统的枚举值,明确告诉API需要获取可读写的属性存储实例,替代默认的只读模式。 - 其他注意事项:确保目标MP4文件本身没有设置只读属性,且当前运行脚本的用户对文件所在目录有写入权限。
内容的提问来源于stack exchange,提问作者JavaPilgrim
相关产品推荐
相关产品推荐

