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

Posted

技术标签:

【中文标题】[Qt][Linux] 列出驱动器或分区【英文标题】:[Qt][Linux] List drive or partitions 【发布时间】:2013-06-07 10:29:27 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

您可以使用/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 上执行时仅包含一项(用于根文件系统)。

【讨论】:

谢谢,我期待一些无法访问文件的东西,但这对我来说已经足够了:) 对普通用户程序使用/etc/mtabnot /proc/mounts/proc/mounts 按时间顺序列出所有挂载点,即使是那些被覆盖的——如您所见,在您的情况下,/ 被报告两次!该信息仅对系统程序有用。 此外,这将严重破坏,因为它不能正确处理空格转换(琐事:如果挂载点的名称中有空格,你会在 /etc/mtab/proc/mounts 中得到什么?答案:在getmntent man page 中搜索“空白”)。正如我在回答中所说,您确实需要使用getmntent【参考方案2】:

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

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

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

【讨论】:

我没有注意到这在 Linux 上被忽略了。但是我仍然找不到与 root 不同的分区/磁盘的任何信息。你会这么好心,告诉我我应该看哪里吗? Linux下可以使用getmntent和朋友打开/etc/mtab,分析里面的信息。【参考方案3】:

Qt 5.4+

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

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

more info

【讨论】:

以上是关于[Qt][Linux] 列出驱动器或分区的主要内容,如果未能解决你的问题,请参考以下文章

列出 Linux 中的所有 USB 驱动器

qt关闭can设备失败

windows挂载EFI分区

挂载磁盘分区大小

ubuntu安装光盘修复驱动

如何在 Linux 中将主目录移动到新分区或磁盘?