Как я могу вывести список дисков или смонтированных разделов, используя qt?
Я пытался использовать:
foreach( QFileInfo drive, QDir::drives() )
{
qDebug() << "Drive: " << drive.absolutePath();
}
но он показывает только корневой диск.
Я также заметил, что длина QDir :: drive () равна 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 / 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.
Вы должны использовать платформо-зависимый код. И, пожалуйста, читать документы!
Возвращает список корневых каталогов в этой системе.
В Windows это возвращает список объектов QFileInfo, содержащих «C: /», «D: /» и т. Д. В других операционных системах он возвращает список, содержащий только один корневой каталог (т. Е. «/»).
Ты можешь использовать QStorageInfo
класс в Qt 5.4+ следующим образом:
foreach (const QStorageInfo &storage, QStorageInfo::mountedVolumes()) {
if (storage.isValid() && storage.isReady()) {
if (!storage.isReadOnly()) {
// ...
}
}
}