我正在寻找的是一种阻止线程的方法,直到它成功使用 boost-filesystem 删除文件夹。
如果一个文件夹包含一个正在使用的文件,它应该阻塞并只有在文件被释放并被成功删除后才能继续。
我正在寻找的是一种阻止线程的方法,直到它成功使用 boost-filesystem 删除文件夹。
如果一个文件夹包含一个正在使用的文件,它应该阻塞并只有在文件被释放并被成功删除后才能继续。
使用 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.
}
}