Windows:文件重命名和目录迭代冲突

时间:2010-08-04 12:10:20

标签: c++ windows boost filesystems

我正在使用boost :: filesystem重命名这样的文件:

boost::filesystem::rename(tmpFileName, targetFile);

tmpFileName / targetFile的类型为boost :: filsystem :: path。

执行此操作时,我在另一个线程中使用此代码遍历目录:

directory_iterator end_itr;
for (directory_iterator itr(dirInfoPath); itr != end_itr; ++itr)
{
    path currentPath = itr->path();
    if (is_directory(itr->status()))
    {
        // skip directories
    }
    else 
    {
        std::string file_name = currentPath.leaf();
        if (!boost::algorithm::starts_with(file_name, "new") 
            && !boost::algorithm::starts_with(file_name, "finished")
            && boost::algorithm::ends_with(file_name, ".info"))
            {
                // save found filename in some variable
                return true;
            }
        }
    }

执行此代码时,重命名时会出现异常:

boost::filesystem::rename: The process cannot access the file because it is being used by another process

迭代和重命名操作是否可能发生冲突,因为它们都访问目录inode,或者我是否还有其他问题?

1 个答案:

答案 0 :(得分:1)

您提供的

代码不包含任何文件打开操作,因此它不能lock该文件。你迭代directory并重命名file,对吗?所以这个文件可能真的被另一个应用程序(如文件查看器或其他东西)使用,这是非常典型的错误。或者你在其他地方的应用程序中打开它