gpt4 book ai didi

c++ - 我正在使用 QDir().isReadable 来检查驱动器是否可读。在 Qt Creator 中它运行良好,但是当我运行 exe 时它一直给我错误

转载 作者:行者123 更新时间:2023-11-30 02:36:15 26 4
gpt4 key购买 nike

我是这样使用它的:

if(QDir("G:/").isReadable()){
qDebug("G Is readable!"); //Do something with G:/
}

正如我所说,在 Qt Creator 中它运行良好,没有问题,它检查驱动器是否可读,如果是,它会将它打印到控制台,如果不是,它什么也不做。

但是当我运行 .exe 文件时,如果驱动器不可读,它每次检查(每 2 秒)时都会给我错误。

“驱动器中没有磁盘。请将磁盘插入驱动器G:。”

我不希望此错误继续出现,我该怎么办?

编辑:我认为是 isReadable 函数导致了问题,还有其他方法可以做我想做的事吗?还是我应该自己编写代码?

最佳答案

此消息由 Windows 生成。

对于拥有无法修复的应用程序的用户,有一个解决方法。可以通过将 2 设置为注册表项 ErrorMode 来抑制错误消息:

Computer\HKEY_LOCAL\MACHINE\SYSTEM\CurrentControlSet\Control\Windows

看起来如果在移除媒体后调用 QDir::isReadable() 会触发该错误。 QDir::exists() 如果盘符存在于系统中,则始终返回 true,因此不能在此处使用。

现在我看到可以使用 native Windows API 检查可移动媒体,请参阅 How to detect if media is inserted into a removable drive/card reader 的答案

以下代码能够在不触发错误的情况下检测到媒体已被移除:

#include <windows.h>

HANDLE hDevice = CreateFile (L"\\\\.\\G:", // like "\\.\G:"
FILE_READ_ATTRIBUTES, // read access to the attributes
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, OPEN_EXISTING, 0, NULL);

if (hDevice == INVALID_HANDLE_VALUE) {
// not valid device
return;
}

WORD cbBytesReturned;
bool bSuccess = DeviceIoControl (hDevice, // device to be queried
IOCTL_STORAGE_CHECK_VERIFY2,
NULL, 0, // no input buffer
NULL, 0, // no output buffer
(LPDWORD)&cbBytesReturned, // # bytes returned
NULL); // synchronous I/O

CloseHandle(hDevice); // close handle

if (bSuccess && QDir("G:/").isReadable()) {
// G is readable
}

关于c++ - 我正在使用 QDir().isReadable 来检查驱动器是否可读。在 Qt Creator 中它运行良好,但是当我运行 exe 时它一直给我错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33003769/

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