Как удалить 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
: Файл должен быть удален сразу после закрытия всех его дескрипторов, включая указанный дескриптор и любые другие открытые или дублированные дескрипторы.
в файл, который у меня открыт.
я создал файл! Конечно, я могу создать его! Все потому, что я забыл указать флаг заранее?