[Qt] [Linux] Список дисков или разделов

Как я могу вывести список дисков или смонтированных разделов, используя qt?
Я пытался использовать:

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

но он показывает только корневой диск.
Я также заметил, что длина QDir :: drive () равна 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 согласно документации. Это статическое целочисленное значение элемента enum, оно ничего не показывает, и в большинстве случаев вам это не нужно. QDir::drives() содержит ровно один элемент (для корневых файловых систем) при выполнении в Linux.

4

Другие решения

Вы должны использовать платформо-зависимый код. И, пожалуйста, читать документы!

Возвращает список корневых каталогов в этой системе.

В Windows это возвращает список объектов QFileInfo, содержащих «C: /», «D: /» и т. Д. В других операционных системах он возвращает список, содержащий только один корневой каталог (т. Е. «/»).

4

Qt 5.4+

Ты можешь использовать QStorageInfo класс в Qt 5.4+ следующим образом:

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

больше информации

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector