우리가 내가 파일 핸들에 데이터를 쓰고 말할 수 있도록 :어떻게 해제를 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();
}
를 데이터의 내 기록이 실패하면, 나는 핸들을 닫을 때 파일이 이 삭제되고 싶어요. 예 : 파일을 "un-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
:
는 내가 뭘하고 싶은 것은 소급 지정 에 대한 방법 파일이 핸들의 모든이 닫힌 후 즉시 삭제 될 지정된 핸들을 포함하고 다른 열려 있거나 복제 된 핸들.
내가 열어 본 파일입니다.
나는 파일을 만들었습니다. 확실하게 나는 그것을 창조 할 수있다! 모두 전에 플래그를 지정하는 것을 잊었 기 때문에?
흥미로운 질문입니다. 해당 플래그를 소급하여 추가 할 수있는 것은 당연합니다. 나에게 소리를내는 것은 임시 파일을 사용하고 성공적으로 작성한 후에 이름을 변경해야하므로 "삭제하기 전에"다른 파일을 열지 않아야한다는 것입니다. – noelicus
밀접하게 관련 : http://stackoverflow.com/questions/3593768/is-there-a-way-to-remove-file-flag-delete-on-close –