utiliza semilla pelar mango maduro hueso cuadros cortar cortado con como comer winapi

winapi - semilla - como se utiliza el mango



Eliminar o Renombrar un archivo usando un mango abierto (1)

La función API de Windows CreateFile le permite especificar el acceso deseado. Hay tres opciones de lectura, escritura y eliminación . Si obtiene un identificador de CreateFile solicitando Eliminar acceso, ¿cómo puede eliminar el archivo utilizando el identificador devuelto? La función DeleteFile toma el nombre del archivo, no el manejador.

Imagen grande: cuando guardo archivos de mi aplicación, primero escribo en un archivo temporal, luego borro el archivo "real" y renombro el archivo temporal al nombre real. Empecé a ver problemas con los indexadores de búsqueda, o anti virus / spyware abriendo el archivo para leer pero no permitiendo las eliminaciones. Esto hace que mi guardado falle al mover los archivos. He cambiado mi código abierto para solicitar acceso de eliminación para asegurarme de que puedo eliminar el archivo cuando llegue el momento de guardarlo.

Todo esto funciona bien, pero todavía tengo un espacio en el que una aplicación de terceros podría tomar mi archivo. Dado que tengo un control abierto para los archivos temporales y reales, estaba buscando una forma de realizar las funciones de eliminar y cambiar el nombre usando esos identificadores. La única opción que puedo encontrar es cerrar los identificadores y luego llamar a las funciones DeleteFile y MoveFile. En realidad, actualmente estoy usando la función ReplaceFile API para realizar esos pasos, pero también ha pasado nombres de archivo y no funcionará a menos que cierre mis identificadores primero.

Todavía necesito dar soporte a XP y no puedo comenzar a utilizar las nuevas funciones de archivo de transacción. ¿Hay alguna manera de mantener los archivos bloqueados y todavía eliminarlos / cambiarles el nombre?


En Windows Vista, existe la función SetFileInformationByHandle , que puede hacer lo que necesita.

En versiones anteriores de Windows, no existe dicha función, pero tiene la función nativa equivalente, no del todo pública, NtSetInformationFile .

No tengo experiencia con estas funciones, ni una máquina con Windows para probarlas, así que no puedo mostrar el código, pero eso no debería ser tan difícil.

El descargo general sobre las funciones nativas de Windows se aplica, por supuesto.