2009-07-04 18 views
6

He visto que el sistema de Windows usa archivos temporales para aumentar el rendimiento de algunas tareas. Esos archivos están marcados con el atributo 0x100 cuando los miro. Tengo el siguiente texto de Microsoft: "Cómo crear un archivo temporal (0x100) para acelerar la aplicación

Al utilizar CreateFile() con el indicador FILE_ATTRIBUTE_TEMPORARY, deja que el sistema sabe que el archivo es probabilidades de ser vivida corta se crea el archivo temporal . como un archivo normal . el sistema tiene que hacer un mínimo cantidad de escrituras diferidas en el fichero de sistema para mantener las estructuras de disco (directorios y así sucesivamente) consistente. Esto da la apariencia de que el archivo se ha escrito para el disco . "

¿Algún ejemplo de creación de dicho archivo temporal utilizando 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. el registro es este archivo con el atributo de temperatura? ¿Sería más rápido y menos propenso a la memoria cuando log logre ser 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); 

Dicho fichero obtener el atributo 0x120 cuando se creó. Por lo tanto, un archivo temporal de acuerdo con el sistema.

También he creado un archivo con el indicador FILE_FLAG_DELETE_ON_CLOSE (see this article by L. Osterman).

Así:

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

, este fichero es ningún atributo y el archivo se elimina automáticamente cuando se cierra la aplicación o destruido.

No he encontrado cómo combinar el atributo y la bandera. ¿Alguna idea?

Gracias

Respuesta

7

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); 

combinar la marca con FILE_FLAG_DELETE_ON_CLOSE, utilice or:

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

Ok, necesito el contexto de uso de dicho archivo, por ejemplo, podría ser utilizado para un sistema de registro. el registro es este archivo con el atributo de temperatura? ¿Sería más rápido y menos propenso a la memoria cuando log logre ser muy grande? (nota, he editado mi pregunta inicial con esta pregunta complementaria). Gracias. – volvox

+0

Es solo un archivo. Úselo donde el uso de un archivo sea apropiado. Los problemas de rendimiento requieren evaluaciones comparativas y otros análisis, aunque se pueden hacer conjeturas. –

+1

OK - Me he encontrado con esto: http://blogs.msdn.com/larryosterman/archive/2004/04/19/116084.aspx – volvox

2

La bandera temporal simplemente indica que desea la escritura en el disco para ser lo más tarde posible. Esto es todo lo contrario que desea para un archivo de registro, ya que desea obtener el contenido del archivo escrito safly en el disco para que pueda acceder incluso en caso de una falla del sistema.

citar el MSDN page fro CreateFile():

Especificar el atributo FILE_ATTRIBUTE_TEMPORARY hace que los sistemas de archivos para evitar la escritura de datos de nuevo 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á cerrada . En ese caso, el sistema puede evitar por completo la escritura de los datos. Aunque no controla directamente el almacenamiento en caché de datos de la misma manera que los indicadores mencionados anteriormente, el atributo FILE_ATTRIBUTE_TEMPORARY le dice al sistema que mantenga todo lo posible en la caché del sistema sin escribir y, por lo tanto, puede ser motivo de preocupación para determinadas aplicaciones.

En mi opinión, solo lo usaría, si se trata realmente de datos temporales que va a eliminar de todos modos después de que haya terminado con ellos, p. cosas que escribirías en el directorio %TEMP%.

+0

Gracias - Buena pista. También puede leer este artículo: http://blogs.msdn.com/larryosterman/archive/2004/04/19/116084.aspx – volvox

Cuestiones relacionadas