我正在使用 QDir().isReadable 来检查驱动器是否可读。在 Qt Creator 中它 运行 很好,但是当我 运行 exe 时它一直给我错误
I'm using QDir().isReadable to check if a drive is readable. In the Qt Creator it runs fine, but when I run the exe it keeps giving me errors
我是这样使用的:
if(QDir("G:/").isReadable()){
qDebug("G Is readable!"); //Do something with G:/
}
正如我所说,在 Qt Creator 中它 运行 没问题,它检查驱动器是否可读,如果是,它会将它打印到控制台,如果不是,它什么都不做。
但是当我 运行 .exe 文件时,如果驱动器不可读,它每次检查(每 2 秒)时都会给我错误。
"There is no disk in the drive. Please insert a disk into drive G:."
我不想让这个错误一直出现,我该怎么办?
编辑:我认为是 isReadable 函数导致了问题,还有其他方法可以完成我想做的事情吗?或者我应该自己写代码?
此消息由 Windows 生成。
对于拥有无法修复的应用程序的用户,有一个解决方法。可以通过将 2
设置为注册表项 ErrorMode
in:
来抑制错误消息
Computer\HKEY_LOCAL\MACHINE\SYSTEM\CurrentControlSet\Control\Windows
看起来,如果在删除媒体后调用 QDir::isReadable()
,它会触发该错误。 QDir::exists()
总是returnstrue
如果盘符存在于系统中,所以不能在这里使用。
现在我看到可以使用本机 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
}
我是这样使用的:
if(QDir("G:/").isReadable()){
qDebug("G Is readable!"); //Do something with G:/
}
正如我所说,在 Qt Creator 中它 运行 没问题,它检查驱动器是否可读,如果是,它会将它打印到控制台,如果不是,它什么都不做。
但是当我 运行 .exe 文件时,如果驱动器不可读,它每次检查(每 2 秒)时都会给我错误。
"There is no disk in the drive. Please insert a disk into drive G:."
我不想让这个错误一直出现,我该怎么办?
编辑:我认为是 isReadable 函数导致了问题,还有其他方法可以完成我想做的事情吗?或者我应该自己写代码?
此消息由 Windows 生成。
对于拥有无法修复的应用程序的用户,有一个解决方法。可以通过将 2
设置为注册表项 ErrorMode
in:
Computer\HKEY_LOCAL\MACHINE\SYSTEM\CurrentControlSet\Control\Windows
看起来,如果在删除媒体后调用 QDir::isReadable()
,它会触发该错误。 QDir::exists()
总是returnstrue
如果盘符存在于系统中,所以不能在这里使用。
现在我看到可以使用本机 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
}