Использование FILE_ATTRIBUTE_TEMPORARY и FILE_FLAG_DELETE_ON_CLOSE - PullRequest
10 голосов
/ 09 марта 2011

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

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

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

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

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

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

Ответы [ 2 ]

11 голосов
/ 09 марта 2011

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

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

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

8 голосов
/ 09 марта 2011

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

...