Я работаю над приложением, в котором мне нужно проверить формат файла накопителя / 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. Пожалуйста помоги 🙂
У меня были похожие проблемы с поиском эквивалентов 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
Нечто подобное должно работать.
Других решений пока нет …