2012-05-23 3 views
2

비슷한 문제에 관해 이전에 답변 된 몇 가지 질문을 읽었지만 앞으로 어떻게해야하는지 아직 명확하지 않습니다. 이것은 시나리오입니다.파일 포인터가 열려 있는지 확인한 다음 C++에서 삭제하십시오.

임시 파일을 몇 개 삭제해야하지만 삭제되지는 않습니다. 디버깅하는 동안 파일을 수동으로 삭제하려고해도 삭제되지 않는다는 것을 깨달았습니다. 따라서 일부 파일 포인터가 아직 파일을 삭제하지 못하게 막지 않았다고 결론을 내 렸습니다.

그러나이 파일 포인터는 나에게 접근 할 수없는 코드 부분에서 사용되고 있습니다. 이로 인해 파일 포인터가 열려 있는지 확인하고 삭제할 수있는 솔루션이 하나만있는 것 같습니다 (어쩌면).

또는 상황을 처리 할 수있는 다른 방법이 있습니까?

+1

POSIX 시스템에서 파일을 [unlink] (http://linux.die.net/man/3/unlink)하고 동일한 프로세스에서 열면 파일이 제거됩니다. 파일이 닫힙니다. –

+0

글쎄, 당신은 이미 솔루션을 설명했습니다. 삭제 시도, 실패한 경우 오류 코드를 검사하여 파일이 열려있어 실패했는지 확인하십시오. – Erik

+0

가능한 해결책을 가져 주셔서 감사합니다. :) – Darzen

답변

0

Windows OS를 사용하는 경우 MoveFileEx 기능을 사용할 수 있습니다.
이렇게하면 재부팅 후 파일을 삭제 표시 할 수 있습니다.

MoveFileEx(lpExistingFileName, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); 
+0

잔인 함. 그냥'DeleteFile'을 호출하십시오. 다른 핸들이 열려 있으면 해당 핸들이 열려있는 동안 삭제가 연기됩니다. – MSalters

관련 문제