Pregunta

He visto que el uso del sistema de Windows los archivos temporales para aumentar el rendimiento de algunas tareas. Esos archivos están marcados con el atributo 0x100 cuando miro a ellos. Tengo el siguiente texto de Microsoft: "

  

Mediante el uso de CreateFile () con el   FILE_ATTRIBUTE_TEMPORARY bandera, dejas   el sistema sabe que el archivo es   propensos a ser de corta duración. los   archivo temporal se crea como normales   archivo. El sistema tiene que hacer un mínimo   cantidad de perezoso escribe en el archivo   sistema para mantener las estructuras de disco   (Directorios y así sucesivamente) consistente.   Esto da la apariencia de que la   archivo se ha escrito en el disco   . "

Cualquier ejemplo de creación de archivo temporal de este tipo usando Delphi?

Gracias.

[EDIT]

pregunta complementaria: lo que podría ser el contexto de la utilización de tales archivos, ejemplo, podría ser utilizado para un sistema de registro. siendo este archivo con el atributo temporal en el registro? ¿Sería más rápido y menos propenso a la memoria cuando el registro se ponen muy grande?

[EDIT]

Ok tengo crear el archivo usando solución dada por schnaader a continuación con el FILE_ATTRIBUTE_TEMPORARY:

hMyFile := CreateFile(FileName,
                      GENERIC_WRITE,
                      0,
                      nil,
                      CREATE_ALWAYS,
                      FILE_ATTRIBUTE_TEMPORARY,
                      0); 

Tal archivo de obtener el atributo 0x120 cuando se creó. Así, un archivo temporal de acuerdo al sistema.

Yo también crear un archivo con la bandera FILE_FLAG_DELETE_ON_CLOSE ( ver este artículo de L. Osterman ).

Así que:

hMyFile := CreateFile(FileName,
                      GENERIC_WRITE,
                      0,
                      nil,
                      CREATE_ALWAYS,
                      FILE_FLAG_DELETE_ON_CLOSE,
                      0);

Este archivo no consigue ningún atributo y el archivo se elimina automáticamente cuando se cierra la aplicación o destruido.

no he encontrado la forma de combinar el atributo y la bandera . ¿Alguna idea?

Gracias

¿Fue útil?

Solución

Bueno, ¿qué tal con el método CreateFile ()?

var
  FileName : PChar;
  hMyFile : THandle;

...

hMyFile := CreateFile(FileName,
                      GENERIC_WRITE,
                      0,
                      nil,
                      CREATE_ALWAYS,
                      FILE_ATTRIBUTE_TEMPORARY,
                      0); 

if (hMyFile = INVALID_HANDLE_VALUE) then begin
  // Error
end;

...

CloseHandle(hMyFile);

Para combinar la bandera con FILE_FLAG_DELETE_ON_CLOSE, el uso or:

hMyFile := CreateFile(FileName,
                      GENERIC_WRITE,
                      0,
                      nil,
                      CREATE_ALWAYS,
                      FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_DELETE_ON_CLOSE,
                      0); 

Otros consejos

La bandera temporal simplemente indica que desea la escritura en el disco para ser lo más tarde posible . Esto es todo lo contrario te gustaría para un archivo de registro, como desee para obtener el contenido del archivo escrito safly en el disco para que pueda acceder a él, incluso en caso de un fallo del sistema.

Para citar el página de MSDN lado a otro CreateFile ( ) :

  

Especificar el atributo FILE_ATTRIBUTE_TEMPORARY hace que los sistemas de archivos para evitar escribir datos a almacenamiento masivo si hay suficiente memoria caché está disponible, ya que una aplicación elimina un archivo temporal después de un mango está cerrado. En ese caso, el sistema puede evitar por completo a escribir los datos. A pesar de que no controla directamente el almacenamiento en caché de datos en la misma forma que las banderas mencionadas anteriormente, el atributo FILE_ATTRIBUTE_TEMPORARY hace indicar al sistema para mantener lo más posible en la memoria caché del sistema sin escribir y por lo tanto pueden ser de interés para ciertas aplicaciones.

En mi opinión, sólo lo utilizaría, si realmente es temporal de datos que se va a eliminar de todos modos después de que haya terminado con él, por ejemplo, cosas que le escribe a %TEMP% directorio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top