Как получить формат файла накопителя в MAC OS в приложении Qt?

Я работаю над приложением, в котором мне нужно проверить формат файла накопителя / SD-карты (FAT 32 / NTFS и т. Д.) И отобразить его. Это приложение на основе Qt, которое я должен запускать как на MAC, так и на Windows. Не существует Qt Api, который позволил бы мне достичь результата, поэтому только я пошел на такой подход.

Вот как я добился этого в Windows:

TCHAR volumeName[MAX_PATH + 1] = { 0 };
TCHAR fileSystemName[MAX_PATH + 1] = { 0 };
DWORD serialNumber = 0;
DWORD maxComponentLen = 0;
DWORD fileSystemFlags = 0;

LPCWSTR path = deviceData->m_strPath.utf16(); //deviceData->m_strpath gives me the drive path

if (GetVolumeInformation(
path,
volumeName,
ARRAYSIZE(volumeName),
&serialNumber,
&maxComponentLen,
&fileSystemFlags,
fileSystemName,
ARRAYSIZE(fileSystemName)))
{
newData.strFileSystem = QString::fromUtf16(fileSystemName);
}

QList m_SDInfoList;
m_SDInfoList.append(newData);

Меня беспокоит то, что я не могу найти MAC API, который может дать мне информацию о формате файла, когда я подключаю тот же диск / SD-карту к машине MAC. Пожалуйста помоги 🙂

1

Решение

У меня были похожие проблемы с поиском эквивалентов OSX довольно многих методов winapi. И самое быстрое решение, которое я обнаружил, это использование утилит командной строки на osx через QProcess. Это, вероятно, намного медленнее, чем любой вызов API, но если вы используете его не часто, это должно быть хорошо.

Например:

diskutil info /dev/disk0s2

дает следующий вывод

(...)
Partition Type:           Apple_HFS
(...)

который вы можете прочитать из вывода QProcess.

QProcess p;
p.start("diskutil",QStringList() << "info" "/path/to/dev");
p.waitForFinished();
foreach(QString line, QString(p.readAll()).split("\n"))
if(line.contains("Partition Type:"))
qDebug() << line

Нечто подобное должно работать.

4

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

Других решений пока нет …

По вопросам рекламы [email protected]