我想替换一个隐藏文件的内容,因此我尝试以 w
模式打开它,以便它被擦除/截断:
>>> import os
>>> ini_path = '.picasa.ini'
>>> os.path.exists(ini_path)
True
>>> os.access(ini_path, os.W_OK)
True
>>> ini_handle = open(ini_path, 'w')
但是这导致了一条回溯:
IOError: [Errno 13] Permission denied: '.picasa.ini'
然而,我使用r+
模式成功地达到了预期结果:
>>> ini_handle = open(ini_path, 'r+')
>>> ini_handle.truncate()
>>> ini_handle.write(ini_new)
>>> ini_handle.close()
问: w
和r+
模式有什么区别,以至于一个会提示“权限拒绝”,而另一个可以正常工作?
更新: 我使用的是Python 2.6.6,在Windows7 x64上运行,目标文件已设置为隐藏属性。当我尝试关闭隐藏属性时,w
模式成功执行。但当我重新打开它时,它再次失败。
问: 为什么w
模式在隐藏文件上失败?这是已知的行为吗?
open
函数的实现。 - zedex_wfopen
函数,该函数是Microsoft C运行时库(CRT)的一部分。如果您安装了Visual Studio,则可以查看CRT源代码,通常在类似C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src
的位置。_wfopen
的实现最终调用CreateFile
(经过几个中间函数调用)。 - Adam Rosenfield