Ich möchte den Inhalt einer versteckten Datei ersetzen, also habe ich versucht, es in w
Modus zu öffnen, so würde es gelöscht/abgeschnitten werden:IOError: [Errno 13] Berechtigung verweigert, wenn versteckte Datei im Modus "w" geöffnet werden soll
>>> 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')
Aber dies führte zu einer Zurückverfolgungs:
IOError: [Errno 13] Permission denied: '.picasa.ini'
Allerdings konnte ich das gewünschte Ergebnis mit r+
Modus erreichen:
>>> ini_handle = open(ini_path, 'r+')
>>> ini_handle.truncate()
>>> ini_handle.write(ini_new)
>>> ini_handle.close()
Q. Was ist der Unterschied zwischen den w
und r+
Modi, so dass man "Berechtigung verweigert" aber die andere funktioniert gut?
UPDATE: Ich bin auf Win7 x64 mit Python 2.6.6, und die Zieldatei hat sein verstecktes Attribut festgelegt. Als ich versuchte, das versteckte Attribut auszuschalten, ist der w
Modus erfolgreich. Aber wenn ich es wieder einschalte, schlägt es wieder fehl.
Q. Warum schlägt der Modus w
bei versteckten Dateien fehl? Ist das bekannte Verhalten?
+1 für die Verknüpfung von Win32-API-Dokumenten. Ihre Erklärung ist genau das, wonach ich gesucht habe. Ich selbst bin nur bis zur [Implementierung] (http://hg.python.org/cpython/file/c6880edaf6f3/Objects/fileobject.c#l318) von Pythons 'open'-Funktion gekommen. – zedex
@MrGamgee: Ja, Python ruft die Funktion '_wfopen' auf, die Teil der Microsoft C Runtime Library (CRT) ist. Wenn Sie Visual Studio installiert haben, können Sie die CRT-Quelle anzeigen, normalerweise in einem Verzeichnis wie 'C: \ Programme (x86) \ Microsoft Visual Studio 10.0 \ VC \ crt \ src'. Die Implementierung von '_wfopen' ruft schließlich' CreateFile' auf (nach einigen Zwischenfunktionsaufrufen). –