Как создать временный файл (0x100) для ускорения приложения

Я видел, что система Windows использует временные файлы для увеличения производительности некоторых задач. Эти файлы помечаются атрибутом 0x100, когда я на них смотрю. Я получил следующий текст от Microsoft: & quot;

By using CreateFile() with the FILE_ATTRIBUTE_TEMPORARY flag, you let the system know that the file is likely to be short lived. The temporary file is created as a normal file. The system needs to do a minimal amount of lazy writes to the file system to keep the disk structures (directories and so forth) consistent. This gives the appearance that the file has been written to the disk ."

Любой пример создания такого временного файла с использованием Delphi?

Благодарю.

[РЕДАКТИРОВАТЬ]

Дополнительный вопрос: каков может быть контекст использования такого файла, например, может ли он использоваться для системы журналов. журнал это файл с атрибутом temp? Будет ли это быстрее и меньше памяти, когда журнал становится очень большим?

[РЕДАКТИРОВАТЬ]

Хорошо, я создал файл, используя решение, данное ниже schnaader с FILE_ATTRIBUTE_TEMPORARY:

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

Такой файл получает атрибут 0x120 при создании. Таким образом, временный файл в соответствии с системой.

Я также создал файл с флагом FILE_FLAG_DELETE_ON_CLOSE (см. эту статью Л. Остермана).

Так:

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

Этот файл не получает атрибутов, и файл автоматически удаляется, когда приложение закрывается или уничтожается.

I did not find how to combine the attribute and the flag, Любая идея?

Спасибо

Ответы на вопрос(2)

Решение Вопроса

Ну, а как насчет использования метода 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);

Чтобы объединить флаг сFILE_FLAG_DELETE_ON_CLOSEиспользоватьor:

hMyFile := CreateFile(FileName,
                      GENERIC_WRITE,
                      0,
                      nil,
                      CREATE_ALWAYS,
                      FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_DELETE_ON_CLOSE,
                      0); 
 volvox04 июл. 2009 г., 19:49
ОК, я наткнулся на это:blogs.msdn.com/larryosterman/archive/2004/04/19/116084.aspx
 05 июл. 2009 г., 23:15
Отредактировал ответ в соответствии с отредактированным вопросом.
 volvox05 июл. 2009 г., 22:14
ПОСМОТРЕТЬ НАЧАЛЬНЫЙ ВОПРОС РЕДАКЦИИ. БЛАГОДАРЮ.
 04 июл. 2009 г., 19:33
Это просто файл. Используйте его там, где уместно использование файла. Проблемы производительности требуют сравнительного анализа и других анализов, хотя можно сделать обоснованные предположения.
 volvox04 июл. 2009 г., 19:31
Хорошо - мне нужен контекст использования такого файла, например, может ли он использоваться для системы журналов. журнал это файл с атрибутом temp? Будет ли это быстрее и меньше памяти, когда журнал становится очень большим? (заметьте, я отредактировал свой первоначальный вопрос этим дополнительным вопросом). Поблагодарить.

Временный флаг просто указывает, что вы хотите, чтобы запись на диск былаas late as possible, Это совершенно противоположно тому, что вы хотите для файла журнала, поскольку вы хотите получить содержимое файла, записанного на диск, чтобы вы могли получить к нему доступ даже в случае сбоя системы.

Цитировать изСтраница MSDN для CreateFile ():

Specifying the FILE_ATTRIBUTE_TEMPORARY attribute causes file systems to avoid writing data back to mass storage if sufficient cache memory is available, because an application deletes a temporary file after a handle is closed. In that case, the system can entirely avoid writing the data. Although it doesn't directly control data caching in the same way as the previously mentioned flags, the FILE_ATTRIBUTE_TEMPORARY attribute does tell the system to hold as much as possible in the system cache without writing and therefore may be of concern for certain applications.

По моему мнению, вы будете использовать его только в том случае, если это действительно временные данные, которые вы собираетесь удалить в любом случае после того, как с ними покончено, например. вещи, в которые вы пишете%TEMP% каталог.

 volvox05 июл. 2009 г., 22:00
Спасибо - Хороший намек. Вы также можете прочитать эту статью:blogs.msdn.com/larryosterman/archive/2004/04/19/116084.aspx

Ваш ответ на вопрос