2013-08-01 6 views
0

Что я ищу - это способ заблокировать поток, пока не удастся удалить папку с помощью файловой системы boost.Как удалить файл/папку заблокированным способом?

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

+0

Так как это специфическая функция ОС, трудно сказать обычно, как будет вести себя вызывающий поток. Но я бы сказал, что для большинства операционных систем поток ** будет ** заблокирован уже во время этой операции. –

+0

Что такое ОС? –

ответ

1

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

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

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. 
    } 
}