在 Windows 中使用(或)权限打开的文件上的write()
紧跟 a似乎不会更新文件。read()
r+
r+b
假设testfile.txt
当前目录中有一个文件,内容如下:
This is a test file.
我执行以下代码:
with open("testfile.txt", "r+b") as fd:
print fd.read(4)
fd.write("----")
我希望代码可以打印This
并将文件内容更新为:
This----a test file.
这至少在 Linux 上运行良好。但是,当我在 Windows 上运行它时,消息会正确显示,但文件没有更改 - 就像write()
被忽略了一样。如果我调用tell()
文件句柄,则表明该位置已更新(在4
之前write()
和8
之后),但文件没有更改。
fd.seek(4)
但是,如果我在该行之前添加一个明确的内容,write()
那么一切都会按我的预期进行。
有人知道 Windows 下这种行为的原因吗?
作为参考,我在带有 NTFS 分区的 Windows 7 上使用 Python 2.7.3。
编辑
作为对评论的回应,我尝试了两者r+b
,并且rb+
-官方 Python 文档似乎暗示前者是规范的。
我fd.flush()
在各个地方打了电话,并在和之间放置了一个,read()
如下write()
所示:
with open("testfile.txt", "r+b") as fd:
print fd.read(4)
fd.flush()
fd.write("----")
...产生以下有趣的错误:
IOError: [Errno 0] Error
编辑 2
间接地添加 a 有flush()
帮助,因为它使我看到描述类似问题的这篇文章。如果其中一位评论者是正确的,则它是底层 Windows C 库中的一个错误。