gpt4 book ai didi

c++ - CreateFileA 间歇性返回错误 20、 "The system cannot find the device specified"

转载 作者:行者123 更新时间:2023-11-30 03:55:48 36 4
gpt4 key购买 nike

我正在使用 msbuild exec 任务编译我的代码期间调试自定义 exe。

它运行以下代码:

HANDLE hFile = CreateFileA(szFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
Fatal(szFile, 1, "unable to open file (%x)", GetLastError());

szFile是msbuild编译出来的dll/exe,作为参数传递给程序。

我有时会看到以下错误:

unable to open file (20)

重建后错误不再发生。根据windows代码,错误代码20是:

ERROR_BAD_UNIT20 (0x14)

The system cannot find the device specified.

虽然我不确定这是什么意思。似乎有问题的文件不存在,因为它确实存在。如果不是,错误代码将是“2”,我试过了。你知道什么会导致这个错误吗?谢谢。

一些事情:

const char *szFile = nullptr;
...
szFile = argv[i]; // it loops over the arguments, parses them and finds the right argment for the file.
....
SetFileAttributes(szFile, FILE_ATTRIBUTE_NORMAL);
HANDLE hFile = CreateFileA(szFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
Fatal(szFile, 1, "unable to open file (%x)", GetLastError());

Fatal() 只是打印文件名和消息。

最佳答案

您正在以十六进制 (%x) 而不是十进制打印错误代码。

错误代码 0x20(十进制 32)是 ERROR_SHARING_VIOLATION(“该进程无法访问该文件,因为它正被另一个进程使用。”)所以,是的,您猜测另一个进程拥有该文件打开是正确的。

在这些情况下,我怀疑存在竞争条件,可能受到病毒扫描的影响。考虑让您的代码检测到此特定错误并在短暂等待后重试。

关于c++ - CreateFileA 间歇性返回错误 20、 "The system cannot find the device specified",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28888118/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com