Domanda

Ho visto che il sistema di Windows utilizzare i file temporanei per aumentare le prestazioni di alcuni compiti. Questi file sono contrassegnati con l'attributo 0x100 quando li guardo. Ho avuto il seguente testo da Microsoft: "

  

Utilizzando CreateFile () con il   Bandiera FILE_ATTRIBUTE_TEMPORARY, si lascia   il sistema sa che il file è   rischia di essere di breve durata. Il   file temporaneo viene creato come normale   file. Il sistema ha bisogno di fare un minimo   quantità di pigro scrive il file   Sistema per mantenere le strutture del disco   (Directory e così via) coerente.   Questo dà l'apparenza che la   il file è stato scritto sul disco   ".

Qualsiasi esempio di creazione di tale file temporanei utilizzando Delphi?

Grazie.

[EDIT]

domanda complementare: quello che potrebbe essere il contesto di utilizzo di tale file, ad esempio, potrebbe essere utilizzato per un sistema di log. il registro essendo questo file con l'attributo temperatura? Sarebbe più veloce e meno memoria incline quando registro ottiene molto grande?

[EDIT]

Ok ho creare il file utilizzando la soluzione data dal schnaader di seguito con la FILE_ATTRIBUTE_TEMPORARY:

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

Tale file di ottenere l'attributo 0x120 al momento della creazione. Così un file temporaneo in base al sistema.

ho anche creare un file con il flag FILE_FLAG_DELETE_ON_CLOSE ( vedere questo articolo di L. Osterman ).

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

Questo file non ottiene l'attributo e il file viene cancellato automaticamente quando l'applicazione è chiusa o distrutto.

non ho trovato come combinare l'attributo e la bandiera . Qualche idea?

Grazie

È stato utile?

Soluzione

Beh, che dire utilizzando il metodo 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);

Per combinare la bandiera con FILE_FLAG_DELETE_ON_CLOSE, uso or:

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

Altri suggerimenti

La bandiera temporanea indica solo che vuoi la scrittura sul disco di essere il più tardi possibile . Questo è tutto il contrario che ci si vuole per un file di log, come si desidera ottenere il contenuto del file scritto safly su disco in modo da potervi accedere anche in caso di guasto del sistema.

Per citare dal pagina MSDN fro CreateFile ( ) :

  

Specificando l'attributo FILE_ATTRIBUTE_TEMPORARY provoca file system di evitare di scrivere dati alla memoria di massa se memoria cache disponibile è sufficiente, perché un'applicazione elimina un file temporaneo dopo una maniglia viene chiusa. In tal caso, il sistema può evitare del tutto la scrittura dei dati. Anche se non controlla direttamente la memorizzazione nella cache i dati nello stesso modo come le bandiere precedentemente menzionati, l'attributo FILE_ATTRIBUTE_TEMPORARY fa dire al sistema di tenere il più possibile nella cache di sistema senza scrivere e quindi può essere di preoccupazione per alcune applicazioni.

A mio parere, devi usare solo, se è veramente dati temporanea che si sta per eliminare ogni modo dopo aver terminato con esso, per esempio cose che ci si scrive a %TEMP% directory.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top