我正在使用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秒)都会给我错误。
"驱动器中没有磁盘。"请把磁盘插入G盘。"
我不希望这个错误一直出现,我该怎么办?
编辑:我认为这是导致问题的isReadable函数,还有其他方法来做我想做的吗?或者我应该自己写代码?
此消息由Windows生成。
对于有无法修复的应用程序的用户,有一个解决方案。通过在
中设置2
为注册表项ErrorMode
,可以抑制错误消息。ComputerHKEY_LOCALMACHINESYSTEMCurrentControlSetControlWindows
看起来,如果QDir::isReadable()
在删除媒体后被调用,它会触发该错误。如果驱动器号在系统中存在,QDir::exists()
总是返回true
,所以它不能在这里使用。
现在我看到可以使用本机Windows API检查可移动媒体,请参阅如何检测媒体是否插入可移动驱动器/读卡器
下面的代码能够检测到媒体被删除而不触发错误:
#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
}
相关文章:
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 将 opencv 从 2.4.13 转换为 3.3.1 时由 cv::resize() 引起的运行错误
- 为什么 leetcode 上有运行错误,而 vs2019 上没有错误?
- 我的代码没有对字符串,C ++运行错误
- C++运行错误:未分配正在释放的指针
- 代码块运行错误: "Process terminated with status -1073741510" 。我做错了什么?
- VS2013中SSE2代码的运行错误
- C++将文本文件读入数组,运行错误:分段错误
- c++运行错误
- 发生无法运行错误
- 简单C++程序在 Xcode、代码块和终端中运行错误
- C++入门练习 1.20 运行错误
- 使用 MinGW 和 netbeans 7.3.1 运行错误
- "snake"运行错误
- 处理提升端点侦听/运行错误
- 不运行错误LNK1120:1 个未解析的外部 VS
- 一切都是正确的,但不能运行:错误预期{或;
- 使用Qt Creator运行错误
- 在循环内输入字符串时出现运行错误
- 为什么sizeof在linux上运行良好,而在windows上遇到运行错误