Question

Je l'ai vu que le système Windows utilisent des fichiers temporaires pour augmenter les performances de certaines tâches. Ces fichiers sont marqués avec l'attribut 0x100 quand je les regarde. J'ai le texte suivant de Microsoft: «

  

En utilisant CreateFile () avec le   drapeau FILE_ATTRIBUTE_TEMPORARY, laissez-vous   le système sait que le fichier est   susceptible d'être de courte durée. le   fichier temporaire est créé comme normale   fichier. Le système doit faire un minimum   quantité de paresseux écrit dans le fichier   système pour maintenir les structures de disque   (Répertoires et ainsi de suite) cohérente.   Cela donne l'impression que le   fichier a été écrit sur le disque   ».

Tout exemple de création d'un tel fichier temporaire en utilisant Delphi?

Merci.

[EDIT]

question complémentaire: ce qui pourrait être le contexte d'utilisation d'un tel fichier, par exemple, pourrait-il être utilisé pour un système de journal. le journal étant ce fichier avec l'attribut temp? Serait-il plus rapide et moins sujette mémoire quand journal devient très grand?

[EDIT]

Ok j'ai créer un fichier en utilisant la solution donnée par schnaader ci-dessous avec le FILE_ATTRIBUTE_TEMPORARY:

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

Ce fichier obtenir l'attribut 0x120 lors de sa création. Ainsi, un fichier temporaire selon le système.

J'ai aussi créer un fichier avec le drapeau de FILE_FLAG_DELETE_ON_CLOSE ( voir cet article par L. Osterman).

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

Ce fichier est pas d'attribut et le fichier est automatiquement supprimé lorsque l'application est fermée ou détruite.

Je ne trouve pas comment combiner l'attribut et le drapeau . Une idée?

Merci

Était-ce utile?

La solution

Eh bien, que diriez-vous en utilisant la méthode 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);

Pour combiner le drapeau avec FILE_FLAG_DELETE_ON_CLOSE, utilisez or:

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

Autres conseils

Le drapeau temporaire indique juste que vous souhaitez l'écriture sur le disque à être le plus tard possible . Ceci est tout à fait au contraire que vous voudriez pour un fichier journal, que vous souhaitez obtenir le contenu du fichier écrit safly sur le disque afin que vous puissiez y accéder même en cas de défaillance du système.

Pour citer le la page MSDN vient CreateFile ( ) :

  

Définition de l'attribut FILE_ATTRIBUTE_TEMPORARY provoque des systèmes de fichiers pour éviter l'écriture des données de retour au stockage de masse si la mémoire cache disponible est suffisante, car une application supprime un fichier temporaire après une poignée est fermée. Dans ce cas, le système peut tout à éviter l'écriture des données. Bien qu'il ne contrôle pas directement la mise en cache des données de la même manière que les drapeaux mentionnés précédemment, l'attribut FILE_ATTRIBUTE_TEMPORARY n'dis le système de tenir autant que possible dans le cache du système sans écriture et peut donc être source de préoccupation pour certaines applications.

A mon avis, tu ne l'utiliser, si elle est vraiment temporaire des données que vous allez supprimer de toute façon une fois que vous avez fini avec elle, par exemple choses que vous écririez à %TEMP% répertoire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top