0

我在将目录移动到新位置时遇到问题,特别是我使用CreateDirectory. 这是代码:

if (FALSE == CreateDirectory(strDestination, NULL))
{
    dwError = GetLastError();
    if (ERROR_ALREADY_EXISTS != dwError)
    {
        strError.Format("Error creating %s: %i", strDestination, dwError);
        LogIt(strError);
    }
}
if (FALSE == MoveFile(strSource, strDestination + strID))
{
    dwError = GetLastError();
    strError.Format("Error moving %s to %s: %i", strSource, strDestination + strID, dwError);
    LogIt(strError);
}

但是,如果我手动创建一个目录,我可以将该路径输入此代码并且它可以工作。我已经比较了这两个目录的安全设置,并确保它们相同,但它仍然无法正常工作。我的创建代码有什么问题吗?如果我将第二个参数保留为NULL,它是否应该授予与手动创建目录时相同的权限?

4

1 回答 1

4

如果您在计算机上运行防病毒软件,它可能会在验证新文件夹/将其添加到其干净缓存时锁定新文件夹。例如,如果 AV 驱动程序陷入其他活动,这可能会导致间歇性计时问题。

要检查是否发生了这种情况,您可以禁用 AV 的按访问扫描仪。您的代码中的一种解决方法是重试(比如说)2-3 次,两者之间有一点延迟。

编辑:由于 OP 已经确认它无法移动到不同的卷,答案是使用带有 MOVEFILE_COPY_ALLOWED 标志的 MoveFileEx() 。

于 2012-11-12T22:41:09.547 回答