- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是这样使用它的:
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/
我的存储库中有一个文件夹,在运行时必须位于存储库外部的另一个路径中。因为我不想在我的应用程序每次运行时都复制该文件夹并且有重复项,所以我在第二个位置创建了一个快捷方式。但是,当使用 QDir entr
我知道,要从给定的绝对路径在 Qt 中创建新路径,您可以使用 QDir::makepath()如 dir.makepath(path) ,正如 this 中所建议的那样题。我在使用它时没有任何问题,并
QString FilePath2 = QFileDialog::getOpenFileName(this, tr("Open Directory"), "C:/", tr("Text files (
我在用 Qt 创建 dir 时遇到问题。 我想在文档目录中创建一个目录,所以我做了一些这样的事情: QString path("C:/Users/Me/Documents/MyApp/profiles
我有一个看起来像这样的相对路径和绝对路径: 绝对:/tmp/somedir 相对:anotherdir/file.txt 我想将两者( /tmp/somedir/anotherdir/file.txt
我在 Ubuntu 12.04 LTS 和 10.04 LTS 平台上工作,我遇到了 QDir::mkPath 问题。我正在尝试使用 mkPath 创建一个路径,比方说/john/play/games
在我的 Qt 程序中,我基本上是选择一个文件夹,查看内容,然后获取索引列表(0、1、2、3、......)。它显示了正确的文件(左),但转换的文件超出了预期。这是错误和代码的图片: 主窗口.h: #i
我正在寻找类似于 python glob 函数的函数。 If my folder structure is: folder1/abc1.txt folder1/xyz1.txt folder1/abc
我一直在尝试在Linux的根目录中创建一个目录。但由于我对Linux平台不太熟悉,我无法在QT中编写正确的程序。你能看一下我的代码并告诉我哪里出错了吗? #include #include #in
在 mac 上构建一个 Qt 程序 - 它在 windows 和 Linux 中都起作用。 1 #include 2 #include 3 .... 4 void afunction()
我的代码非常简单: void DirManagement::listFiles(QDir dir) { QFileInfoList list = dir.entryInfoList(QDir::
在我的程序中,我有一个 QDir 表示使用 QCoreApplication::applicationDirPath() 的可执行文件的位置,还有一个 QString 表示相对于可执行目录(使用 ..
我正在使用 QT 5.7,来自 doc : bool QDir::rename(const QString &oldName, const QString &newName) 为什么要指定目录的旧名称
setNameFilters 没有按我的预期工作,所以如果有人能解释我是否使用不正确,或者这可能是 Qt 中的错误: 这是我的代码示例: QDir export_folder("C:\path");
是否可以使用 QDir::entryList() 同时检索具有特定文件类型和目录名称的文件名? ? 我有国旗QDir::Dirs在我的代码中。但是因为我添加了 << "*.mp4" ,它忽略了文件夹。
Qt's doc说 QDir::entryInfoList 可以接受多个排序条件,但我不清楚该怎么做。 This enum describes the sort options available t
在为预先存在的 QDir 对象重新分配新路径时,我在 Qt (v4.8.4) 中遇到了异常情况。这是一个证明这一点的简化示例: QString path1("F:/"); //Path m
QFile 有一个静态函数 bool QFile::remove (const QString & fileName) [静态] 删除指定的文件。这很方便:我们有一个文件路径,我们使用一个命令来删除它
我是 Qt 的新手,正在学习如何使用 QDir 和 QFile 库重命名文件。 我知道如何重命名并且我可以做到,但是当我在这个循环中尝试时它不起作用。 QDir editFile; std::cout
有没有办法获得 2 个 QDir 对象的最近公共(public)父对象?例如: QDir d1("/someroot/parent/test/folder"); QDir d2("/someroot/
我是一名优秀的程序员,十分优秀!