0

我在使用 Windows API 将文件从一个位置移动到另一个位置的应用程序时遇到问题。问题不在于代码,它似乎是项目设置,但我不知道要查找什么或在哪里。

我创建了一个项目,编写了大量代码,然后开始实现移动位。在测试中,我不断收到“拒绝访问”的结果。经过大量挠头后,我创建了一个新项目来对移动代码进行单元测试。它工作得很好。我将已知的工作代码批发复制到原始项目中,删除其他所有内容并重新运行。拒绝访问。因此,两个项目之间的唯一区别在于项目设置中的内容。我还检查了资源管理器中两个 exe 文件的安全设置。两者都与我作为所有者相同。

请任何人都可以建议我需要在设置中检查/更改什么?我不想费力尝试手动比较这两个项目设置。

非常感谢。

对于任何感兴趣的人,我正在运行的代码是:

#include <windows.h>
#include <string>
#include <stdio.h>

void main(int argc, char** argv)
{
std::string srcPath = "S:\\_UploadTests\\Oct_10";
std::string dstPath = "S:\\_archivedtests\\Oct_10";

BYTE flags;
flags = MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING;

if (!MoveFileExA(srcPath.c_str(), dstPath.c_str(), flags)) {
    fprintf(stderr, "Error moving folder to local archive. \n\tWindows returned code: %ld\n", GetLastError());
}
getchar();
}
4

1 回答 1

0

好的,所以发生了很多事情,但我发现了问题。

首先也是最重要的是,它与解决方案设置无关!移动作为复制和删除执行(此选项有一个标志)。有时复制会成功,但删除不会成功,我会在 Windows 整理我造成的混乱之前终止该进程。简而言之,有时我会终止进程,有时我会让它自然终止,导致文件系统处于不同的状态,这在试图理解发生了什么时造成混乱。

那么为什么有时当 Windows 试图删除文件时会出现问题呢?好吧,在我原来的项目中,我使用了一个递归遍历文件夹并收集其内容列表的函数。这个函数在完成时没有释放文件夹,因此当后面的移动函数试图做它的事情时导致访问被拒绝错误。

为什么当我尝试运行上面的代码片段时仍然发生拒绝访问?不知道,但现在这是一个有争议的问题。

感谢你们的支持。

于 2018-10-05T09:40:09.490 回答