Jak usunąć CreateFile

Powiedzmy, że piszę dane do uchwytu pliku:

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();
}

Jeśli mój zapis danych nie powiedzie się, chcę, aby plik byłusunięte kiedy zamknę uchwyt. To znaczy: chcę, żeby plik był„un-CreatFile'd”.

wypróbowałem to, co oczywiste, usuń plik, jeśli wystąpił problem:

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;
}

Istnieją dwa problemy z tym podejściem:

Jest sytuacja wyścigu, w której ktoś może otworzyć mój plik po zamknięciu go, ale zanim go usunęmógłbym mieć pozwolenieStwórz plik, ale nieKasować to.

Chciałbym znaleźć sposóbz mocą wsteczną sprecyzować:

FILE_FLAG_DELETE_ON_CLOSE: Plik należy usunąć natychmiast po zamknięciu wszystkich jego uchwytów, w tym określonego uchwytu i innych otwartych lub zduplikowanych uchwytów.

do pliku, który mam otwarty.

stworzyłem plik! Z pewnością mogę go uwolnić! Wszystko dlatego, że zapomniałem podać flagę przed rozdaniem?

questionAnswers(3)

yourAnswerToTheQuestion