Desidero sostituire il contenuto di un file nascosto, quindi ho tentato di aprirlo nella modalità w
in modo da essere cancellato/troncato:IOError: [Errno 13] Autorizzazione negata quando si tenta di aprire il file nascosto in modalità "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')
Ma questo ha comportato una traceback:
IOError: [Errno 13] Permission denied: '.picasa.ini'
Tuttavia, sono stato in grado di ottenere il risultato desiderato con r+
modalità:
>>> ini_handle = open(ini_path, 'r+')
>>> ini_handle.truncate()
>>> ini_handle.write(ini_new)
>>> ini_handle.close()
Q. Qual è la differenza tra le modalità w
e r+
, in modo tale che un utente ha il "permesso negato", ma l'altro funziona correttamente?
UPDATE: Sono su win7 x64 utilizzando Python 2.6.6 e il file di destinazione ha il set di attributi nascosti. Quando ho provato a disattivare l'attributo nascosto, la modalità w
ha esito positivo. Ma quando lo riaccendo, fallisce di nuovo.
Q. Perché la modalità w
non funziona sui file nascosti? È questo comportamento noto?
+1 per il collegamento di documenti API Win32. La tua spiegazione è esattamente ciò che stavo cercando. Da solo, ho raggiunto solo la [implementazione] (http://hg.python.org/cpython/file/c6880edaf6f3/Objects/fileobject.c#l318) della funzione 'open' di Python. – zedex
@MrGamgee: Sì, Python chiama la funzione '_wfopen', che fa parte della libreria di runtime Microsoft C (CRT). Se hai installato Visual Studio, puoi guardare l'origine CRT, in genere in "C: \ Programmi (x86) \ Microsoft Visual Studio 10.0 \ VC \ crt \ src'. L'implementazione di '_wfopen' alla fine chiama' CreateFile' (dopo alcune chiamate di funzioni intermedie). –