VS2013项目设置导致的文件移动访问被拒绝(也许?)

时间:2018-10-05 08:32:55

标签: visual-studio-2013 access-violation movefileex

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

我创建了一个项目,编写了大量代码,然后实现了move位。在测试中,我一直得到“拒绝访问”结果。经过大量的努力,我创建了一个新项目来对移动代码进行单元测试。工作正常。我将已知的工作代码批发复制到原始项目中,删除了所有其他内容并重新运行。拒绝访问。因此,两个项目之间的唯一区别是项目设置中的内容。我还检查了两个文件的资源管理器中的安全设置。我和所有者都一样。

请问有人可以建议我检查/更改设置吗?我不想费力尝试手动比较两个项目的设置。

非常感谢。

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

#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();
}

1 个答案:

答案 0 :(得分:0)

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

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

那么,为什么Windows尝试删除文件时有时会出现问题?在我的原始项目中,我使用了一个递归遍历文件夹并收集其内容列表的函数。此功能未在完成时释放文件夹,因此,当后来的move功能尝试执行此操作时,会导致拒绝访问错误。

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

感谢支持人员。