Windows:文件重命名和目录迭代冲突
Posted
技术标签:
【中文标题】Windows:文件重命名和目录迭代冲突【英文标题】:Windows: File rename and directory iteration *** 【发布时间】:2010-08-04 12:10:20 【问题描述】:我正在使用 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】:您提供的代码不包含任何文件打开操作,因此它不能lock
文件。你遍历directory
并重命名file
,对吗?所以这个文件可能真的被 另一个 应用程序(如文件查看器或其他东西)使用,这是非常典型的错误。或者你在其他地方的应用中打开它
【讨论】:
以上是关于Windows:文件重命名和目录迭代冲突的主要内容,如果未能解决你的问题,请参考以下文章