Hola, descubrimos la respuesta a tu interrogante, has scroll y la obtendrás aquí.
Solución:
Así es como funciona la API de Win32. Debajo del capó, Python open
función está llamando a la CreateFile
función, y si eso falla, traduce el código de error de Windows en un Python IOError
.
Él r+
el modo abierto corresponde a un dwAccessMode
de GENERIC_READ|GENERIC_WRITE
y un dwCreationDisposition
de OPEN_EXISTING
. Él w
el modo abierto corresponde a un dwAccessMode
de GENERIC_WRITE
y un dwCreationDisposition
de CREATE_ALWAYS
.
Si lee atentamente los comentarios en el CreateFile
documentación, dice esto:
Si
CREATE_ALWAYS
yFILE_ATTRIBUTE_NORMAL
se especifican,CreateFile
falla y establece el último error enERROR_ACCESS_DENIED
si el archivo existe y tiene elFILE_ATTRIBUTE_HIDDEN
oFILE_ATTRIBUTE_SYSTEM
attribute. Para evitar el error, especifique el mismo attributes como el archivo existente.
Así que si estuvieras llamando CreateFile
directamente desde el código C, la solución sería agregar FILE_ATTRIBUTE_HIDDEN
hacia dwFlagsAndAttributes
parámetro (en lugar de sólo FILE_ATTRIBUTE_NORMAL
). Sin embargo, dado que no hay ninguna opción en la API de Python para indicarle que pase ese indicador, solo tendrá que solucionarlo utilizando un modo de apertura diferente o haciendo que el archivo no esté oculto.
Aquí están las diferencias detalladas: –
“r” Abrir archivo de texto para lectura. La secuencia se coloca al principio del archivo.
“r+” Abierto para lectura y escritura. La secuencia se coloca al principio del archivo.
“w” Trunca el archivo a cero o crea un archivo de texto para escribir. La secuencia se coloca al principio del archivo.
“w+” Abierto para lectura y escritura. El archivo se crea si no existe, de lo contrario se trunca. La secuencia se coloca al principio del archivo.
“a” Abierto para escribir. El archivo se crea si no existe. La secuencia se coloca al final del archivo. Las escrituras subsiguientes en el archivo siempre terminarán en el final actual del archivo, independientemente de cualquier fseek(3) intermedio o similar.
“a+” Abierto para lectura y escritura. El archivo se crea si no existe. La secuencia se coloca al final del archivo. Las escrituras subsiguientes en el archivo siempre terminarán en el final actual del archivo, independientemente de cualquier intervención fseek(3) o similar.
De la documentación de Python – http://docs.python.org/2/tutorial/inputoutput.html#reading-and-write-files:-
En Windows, la ‘b’ añadida al modo abre el archivo en modo binario, por lo que también hay modos como ‘rb’, ‘wb’ y ‘r+b’. Python en Windows hace una distinción entre archivos de texto y binarios; los caracteres de final de línea en los archivos de texto se modifican automáticamente cuando se leen o escriben datos. Esta modificación detrás de escena de los datos del archivo está bien para los archivos de texto ASCII, pero corromperá los datos binarios como los de los archivos JPEG o EXE. Tenga mucho cuidado de usar el modo binario cuando lea y escriba dichos archivos. En Unix, no está de más agregar una ‘b’ al modo, por lo que puede usarlo independientemente de la plataforma para todos los archivos binarios.
Así que si estás usando w
modo, en realidad está tratando de crear un archivo y es posible que no tenga los permisos para hacerlo. r+
es la elección adecuada.
Si se encuentra en una situación en la que aún no sabe dónde está su .picasi.ini
existe o no y su usuario de Windows tiene permisos de creación de archivos en ese directorio y desea agregar nueva información en lugar de comenzar al principio del archivo (también conocido como “agregar”), entonces a+
será la elección adecuada.
No tiene nada que ver con si su archivo está oculto o no.
Puedes añadir valor a nuestra información asistiendo con tu experiencia en las interpretaciones.