Использование FILE_ATTRIBUTE_TEMPORARY и FILE_FLAG_DELETE_ON_CLOSE

Я использую два флаг FILE_ATTRIBUTE_TEMPORARY и FILE_FLAG_DELETE_ON_CLOSE при создании временных файлов в моем C++ приложении.

Согласно этому блогу, на диске не должно быть никаких файлов:

Это только временно

Ларри Остерман, 19 апреля 2004 г.

Чтобы создать "временный" файл, вы вызываете CreateFile, указывая FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE в dwFlagsAndAttributes приписывать. Эта комбинация битов служит подсказкой для файловой системы, что данные файла никогда не должны записываться на диск. Другими словами, такой файл может быть создан, записан и прочитан без того, чтобы система никогда не касалась диска.

Но в моем коде файл создается и записывается на диск (даже для данных размером 1 КБ). Может кто-то подтвердить точную функциональность этих флагов, и созданы ли файлы на диске или нет?

Ответ 1

Позже в той же ссылке есть цитата:

Если вы превысите доступную память, диспетчер памяти очистит файл данные на диск. Это вызывает производительность, но ваша операция будет успешным, а не неудачным.

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

Ответ 2

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