1

我正在寻找的是一种阻止线程的方法,直到它成功使用 boost-filesystem 删除文件夹。

如果一个文件夹包含一个正在使用的文件,它应该阻塞并只有在文件被释放并被成功删除后才能继续。

4

1 回答 1

2

使用 boost 文件系统操作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.
    }
}
于 2013-08-01T18:09:54.360 回答