我正在使用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,或者我是否还有其他问题?
答案 0 :(得分:1)
代码不包含任何文件打开操作,因此它不能lock
该文件。你迭代directory
并重命名file
,对吗?所以这个文件可能真的被另一个应用程序(如文件查看器或其他东西)使用,这是非常典型的错误。或者你在其他地方的应用程序中打开它