Windowsで(または)アクセス許可で開かれたファイルのwrite()
直後にファイルが更新されないようです。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パーティションを備えたWindows7でPython2.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
同様の問題を説明するこの投稿flush()
に私を導いたので、間接的にその追加は助けになりました。コメント投稿者の1人が正しければ、基盤となるWindowsCライブラリのバグです。