[Qt] [Linux]列出驱动器或分区

时间:2013-06-07 10:29:28

标签: c++ linux qt qt5 qdir

如何使用qt列出驱动器或已安装的分区? 我试着用:

foreach( QFileInfo drive, QDir::drives() )
       {
         qDebug() << "Drive: " << drive.absolutePath();
       }

但它只显示root驱动器。 我还注意到QDir :: drives()的长度为1,但QDir :: Drives为4。

3 个答案:

答案 0 :(得分:4)

您需要使用特定于平台的代码。而且,请 read the docs

  

返回此系统上的根目录列表。

     

在Windows上,它返回一个包含“C:/”,“D:/”等的QFileInfo对象列表。在其他操作系统上,它返回一个只包含一个根目录的列表(即“/”)

答案 1 :(得分:4)

您可以使用/etc/mtab文件获取挂载点列表。

QFile file("/etc/mtab");
if (file.open(QFile::ReadOnly)) {
  QStringList mountpoints;
  while(true) {
    QStringList parts = QString::fromLocal8Bit(file.readLine()).trimmed().split(" ");
    if (parts.count() > 1) {
      mountpoints << parts[1];
    } else {
      break;
    }
  }
  qDebug() << mountpoints;
}

我机器上的输出:

  

(“/”,“/ proc”,“/ sys”,“/ sys / fs / cgroup”,“/ sys / fs / fuse / connections”,“/ sys / kernel / debug”,“/ sys / kernel / security“,”/ dev“,”/ dev / pts“,”/ run“,”/ run / lock“,”/ run / shm“,”/ run / user“,”/ media / sf_C_DRIVE“ ,“/ media / sf_C_DRIVE”,“/ media / sf_D_DRIVE”,“/ run / user / ri / gvfs”)

请注意,QFile::atEnd()始终对此文件返回true,因此我没有在我的代码中使用它。

根据文档,

QDir::Drives为4。它是枚举项的静态整数值,它没有显示任何内容,在大多数情况下你不应该关心它。 QDir::drives()在Linux上执行时只包含一个项目(对于根文件系统)。

答案 2 :(得分:0)

Qt 5.4 +

您可以在 Qt 5.4 + 中使用QStorageInfo课程,如下所示:

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

<强> more info