2

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

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

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

4

3 回答 3

5

您需要使用特定于平台的代码。并且,请阅读文档

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

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

于 2013-06-07T11:02:49.520 回答
5

您可以使用/etc/mtabfile 获取挂载点列表。

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/安全”、“/dev”、“/dev/pts”、“/run”、“/run/lock”、“/run/shm”、“/run/user”、“/media/sf_C_DRIVE”、“/媒体/sf_C_DRIVE"、"/media/sf_D_DRIVE"、"/run/user/ri/gvfs")

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

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

于 2013-06-07T12:09:27.573 回答
2

Qt 5.4+

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

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

更多信息

于 2018-03-10T11:20:29.397 回答