¿Alguien puede explicar cuál es la diferencia entre las disposiciones de creación OPEN_ALWAYS
y CREATE_ALWAYS
del Crea un archivo() función de la API de Windows?
Para mí, parece que ambos simplemente ‘crean el archivo si aún no existe’.
Jon
CREATE_ALWAYS
también trunca el contenido si el archivo ya existe. Por otra parte, OPEN_ALWAYS
no eliminará un archivo ya existente.
Así es como funcionan los diferentes valores en forma tabular:
| When the file...
This argument: | Exists Does not exist
-------------------------+------------------------------------------------------
CREATE_ALWAYS | Truncates Creates
CREATE_NEW +-----------+ Fails Creates
OPEN_ALWAYS ===| does this |===> Opens Creates
OPEN_EXISTING +-----------+ Opens Fails
TRUNCATE_EXISTING | Truncates Fails
-
Eso era exactamente lo que esperaba: es gracioso que la documentación esté formulada de manera tan vaga. Gracias.
– Kristian Spangsege
22 de enero de 2013 a las 23:02
-
Bonita mesa. Algunos pensamientos aleatorios: si el archivo existe, hay 3 resultados: Trunca, falla, abre; si el archivo no existe hay 2 resultados: Crea, falla. Entonces 3*2 = 6 comportamientos diferentes. Desde el falla/falla es totalmente inútil, solo quedan 5 posibilidades, ¡y aquí están!
– rodrigo
22 de enero de 2013 a las 23:10
-
También lo que es importante agregar a esa tabla es lo que sucede con el puntero de archivo cuando se abre un archivo existente (cuando
OPEN_ALWAYS
oOPEN_EXISTING
se especifica.) En ambos casos, el puntero del archivo apuntará al principio del archivo. Entonces, si luego comienza a escribir en ese archivo, sobrescribirá el comienzo del archivo y no lo haré añádalo al final del archivo. Para cambiar ese usoSetFilePointerEx
funcionar conFILE_END
bandera antes de escribir.– ahmd0
22 de julio de 2017 a las 21:37
-
@ahmd0 Dónde
WriteFile
s termina en realidad depende de la máscara de acceso, si solo solicita la adición de archivo, se escribirá al final del archivo en NT.– Anders
4 sep 2019 a las 18:33