Как удалить файл / папку блокирующим способом?

То, что я ищу, — это способ заблокировать поток, пока он не удастся удалить папку с помощью boost-filesystem.

Если папка содержит используемый файл, она должна блокироваться и продолжаться только после того, как файл будет выпущен и успешно удален.

0

Решение

Использование форсированной файловой системы remove_all() должен сделать работу за вас нормально.

Я предполагаю, что вы имеете в виду проблему, заключающуюся в том, что эта операция может вызвать исключение или вернуть ошибку вместо ожидания, когда один файл не может быть удален из-за одновременного доступа.
Вы можете просто решить эту проблему, перехватив исключение и поместив блок try / catch в цикл, который выполняется до тех пор, пока вся операция не будет выполнена без каких-либо ошибок или исключений:

boost::filesystem::path dirToRemove("SomeDirectoryToRemove");
bool completed = false;
while(!completed)
{
try
{
boost::filesystem::remove_all(dirToRemove);
completed = true;
}
catch(...)
{
// put a sleep() call or other blocking operation here, to give other
// threads a chance to run, while this one waits to get rid of the error
// condition.
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector