Использование 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
Он просто говорит, что файл никогда не будет сброшен на диск. Это означает, что, хотя он существует в вашей файловой системе, он никогда не будет физически сохранен на вашем жестком диске. Файловая система покажет ее с фактическим размером и всеми.