вызывая CreateFile, указывая FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE - PullRequest
1 голос
/ 16 мая 2010

Прежде чем я опишу свою проблему, вот описание программы, которую я пишу:

Это приложение на C ++.

Цель моей программы - создать файл в оперативной памяти.

Я прочитал, что если указать FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE при создании файла он будет загружен непосредственно в оперативную память.

Один из обсуждаемых блогов: http://blogs.msdn.com/larryosterman/archive/2004/04/19/116084.aspx

Я построил мини-программу, но она не достигает цели. Вместо этого он создает файл на жестком диске в указанном мной каталоге.

Вот моя программа:

void main ()

{

LPCWSTR str = L "c: \ temp.txt"; HANDLE fh = CreateFile (str, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE, NULL);

if (fh == INVALID_HANDLE_VALUE) { printf («Не удалось открыть TWO.TXT»); вернуть; } * * Тысяча двадцать-один

DWORD dwBytesWritten;

для (long i = 0; i <20000000; i ++) { WriteFile (fh, «Это тест \ r \ n», 16, & dwBytesWritten, NULL); } </p>

возвращение; }

Я думаю, что есть проблема в функции CreateFile, но я не могу ее исправить. Пожалуйста, помогите мне.

1 Ответ

2 голосов
/ 16 мая 2010

Ларри Остерман также упоминает:

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

Таким образом, ОС создает файл на тот случай, если ей необходимо сбросить данные из-за ограничений памяти.

...