2012-05-23 3 views
2

Хотя я прочитал несколько ранее ответивших вопросов, касающихся аналогичной проблемы, я пока не понимаю, как идти дальше. Это сценарий:Проверьте, открыт ли указатель файла, а затем удалите его в C++

Мне нужно удалить несколько временных файлов, но затем они не удаляются. Во время отладки я понял, что даже ручная попытка удалить файлы не удаляет их. Поэтому я пришел к выводу, что некоторые указатели на файлы еще не закрыты, но я не могу удалить файл.

Но тогда эти указатели файлов используются в некоторых частях кода, которые мне недоступны. Это оставляет мне только одно решение (возможно), чтобы проверить, открыт ли указатель файла и удалить его.

или есть ли другой способ справиться с ситуацией?

+1

В системах POSIX, если вы [ 'unlink'] (http://linux.die.net/man/3/unlink) файл, и он открыт в том же процессе, он будет удален, если файл закрыт. –

+0

Ну, вы уже описали решение. Попытайтесь удалить, если он не прошел проверку кода ошибки, чтобы узнать, не удалось ли это из-за открытого файла. – Erik

+0

Благодарим вас за возможные решения. :) – Darzen

ответ

0

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

MoveFileEx(lpExistingFileName, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); 
+0

Overkill. Просто назовите 'DeleteFile'. Если открываются другие ручки, удаление будет отложено до тех пор, пока эти дескрипторы открыты. – MSalters