如何以阻止的方式删除文件/文件夹

How to delete file/folder in a blocking way?

本文关键字:删除 文件 文件夹 方式      更新时间:2023-10-16

我正在寻找一种方法来阻止线程,直到它成功地使用boost文件系统删除文件夹。

如果文件夹中包含一个正在使用的文件,则只有在文件被释放并成功删除后,文件夹才会阻止并继续。

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