【问题标题】:How to check if a drive is connected (mounted)?如何检查驱动器是否已连接(安装)?
【发布时间】:2021-12-22 00:27:05
【问题描述】:

Qt Qprocess 是否可以检测已安装的 Loacation(可能是 NAS)是否已连接? 通常,如果有条目,我会检查 /proc/mounts,但如果我断开与 NAS 的连接,则文件不会意识到它。 使用 df 命令,我可以检查挂载点是否可用。但是如果连接断开,df 进程不会给出输出。也许是无限的。

我试过了

QProcess p;
p.start("bash", QStringList() << "-c" <<
      "df -P -T /media/storage/ | grep QIS | awk -F ' ' '{print $1}'");
if (p.waitForFinished(2))
{
  qDebug() << "Nothing";
  p.close();
}

但是什么也没发生。

当我尝试 df 到一个未安装的目录时,我的程序似乎“冻结”了。如果 df 进程在例如 2 秒后没有应答,是否可以取消进程?

【问题讨论】:

标签: c++ linux qt


【解决方案1】:

关于QProcessQProcess::waitForFinished 以毫秒为参数,而不是秒。此外,最好连接到QProcess::finished 信号而不是阻塞事件循环。

话虽如此,当有一个QStorageInfo 和一个mountedVolumes 方法时,为什么要使用QProcess

for (const auto &storage : QStorageInfo::mountedVolumes()) {
    if (storage.isValid() && storage.isReady()) {
        if (!storage.isReadOnly()) {
            // ...
        }
    }
}

【讨论】:

  • 谢谢,但这对我不起作用。使用 QStorageInfo 我可以打印所有已安装的设备,但是当我尝试列出我未安装的设备时仍然没有答案。
  • @DaveR,你怎么期望看到不存在的东西?
猜你喜欢
  • 1970-01-01
  • 2015-06-02
  • 2013-07-16
  • 1970-01-01
  • 2019-11-21
  • 2013-03-24
  • 2012-08-05
  • 2015-06-21
  • 1970-01-01
相关资源
最近更新 更多