Как удалить CreateFile

Допустим, я пишу данные в дескриптор файла:

hFile = CreateFile(filename, GENERICREAD | GENERICWRITE, 0, null, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
//[snip error check]
try
{
   if (!WriteFile(hFile, buffer, count, ref bytesWritten, null))
       throw new Win32Exception(GetLastError());
}
finally
{
   CloseHandle();
}

Если моя запись данных не удалась, я хочу, чтобы файл былудаленный когда я закрою ручку. Т.е .: я хочу, чтобы файл был"Ун-CreatFile'd".

я пробовал очевидное, удалите файл, если возникла проблема:

hFile = CreateFile(filename, GENERICREAD | GENERICWRITE, 0, null, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
//[snip error check]
try
{
   try
   {
      if (!WriteFile(hFile, buffer, count, ref bytesWritten, null))
          throw new Win32Exception(GetLastError());
   }
   finally
   {
      CloseHandle();
   }
}
catch
{
   DeleteFile(filename);
   throw;
}

У этого подхода есть две проблемы:

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

То, что я хотел бы, это способзадним числом указывать:

FILE_FLAG_DELETE_ON_CLOSE: Файл должен быть удален сразу после закрытия всех его дескрипторов, включая указанный дескриптор и любые другие открытые или дублированные дескрипторы.

в файл, который у меня открыт.

я создал файл! Конечно, я могу создать его! Все потому, что я забыл указать флаг заранее?

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

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