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

[Qt][Linux] List drive or partitions

本文关键字:分区 驱动器 Qt Linux      更新时间:2023-10-16

如何使用qt列出驱动器或挂载的分区?我尝试使用:

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

但是它只显示根驱动器。我还注意到QDir::drives()的长度是1,但QDir::drives是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/连接"、"/sys/内核调试","/sys/内核/安全"、"/dev"、"/dev/pts","/"、"/运行/锁","/跑步/shm"、"/运行/用户","/媒体/sf_C_DRIVE"、"/媒体/sf_C_DRIVE"、"/媒体/sf_D_DRIVE"、"/运行/user/ri/养狐业")

注意,QFile::atEnd()对于这个文件总是返回true,所以我没有在我的代码中使用它。

根据文档

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

需要使用特定于平台的代码。还有,请阅读文档!

返回当前系统的根目录列表。

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

Qt 5.4+

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

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

更多信息