[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/mtab
和not /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] 列出驱动器或分区的主要内容,如果未能解决你的问题,请参考以下文章