【问题标题】:How to delete file/folder in a blocking way?如何以阻塞方式删除文件/文件夹?
【发布时间】:2013-08-01 17:22:38
【问题描述】:

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

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

【问题讨论】:

  • 由于它是一个特定于操作系统的函数,因此通常很难判断调用线程的行为方式。但我想说,对于大多数操作系统,线程在此操作期间已经被阻塞。

标签: c++ file-io blocking boost-filesystem


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    相关资源
    最近更新 更多