Я отлаживаю пользовательский exe во время компиляции моего кода с помощью задачи execbuilder msbuild.CreateFileA возвращает ошибку 20, «Система не может найти указанное устройство» с перерывами
Он работает следующий код:
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 является DLL/EXE, который был составлен MSBuild, который передается программе в качестве аргумента.
Я иногда видеть следующее сообщение об ошибке:
unable to open file (20)
После восстановления ошибка не повторится. Согласно кодам окон код ошибки 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() просто делает Printf имени файла и сообщения.
Проверьте правильность значения переменной szFile. Не забывайте избегать символов «\». –
@ Kostia: Экранирование символов '\\' требуется только при использовании символов string/character ** **. Во время выполнения переменная, указывающая на строку, интерпретируется как есть. Не требуется экранирование. – IInspectable
По-прежнему проверьте правильность значения szFile. – immibis