C++ MoveFile 为 Windows Server 上的目录移动提供不一致的 ERROR_ACCESS_DENIED

标签 c++ directory windows-server-2003

我在将目录移动到新位置时遇到问题,特别是我使用 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,它是否应该授予与我手动创建目录时相同的权限?

最佳答案

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

要检查这是否正在发生,您可以禁用 AV 的按访问扫描程序。您的代码中的解决方法是重试(比方说)2-3 次,中间稍有延迟。

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

关于C++ MoveFile 为 Windows Server 上的目录移动提供不一致的 ERROR_ACCESS_DENIED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13352396/

相关文章:

bash - 被另一个 bash 脚本调用后获取文件的当前目录

德尔福7 : Any differences between compiling under Win XP or Windows Server 2003?

java - 如何在 Apache tomcat catalina 中为不同服务器上的文件夹指定路径?

java - Windows Server 2003下如何在本地系统账户下运行jvisualvm.exe?

c++ - OpenCV calcHist 函数。

c++ - 不同项目中多个类的基类

C++ 选择语句返回 true

c++ - oaidl.h(319) : error C2057: expected constant expression

file - 批处理文件移动名称中带有空格的文件。

c# - 如何在 asp.net 中按顺序从目录中获取文件?