Можно ли узнать, является ли путь к диску (например, P:/temp/foo) локальным или удаленным?
Здесь (строка CMD, чтобы узнать, файл/путь является локальным или удаленным?) он показан для оценки cmd, но я ищу способ C++/Qt.
Относится к:
Можно ли узнать, является ли путь к диску (например, P:/temp/foo) локальным или удаленным?
Здесь (строка CMD, чтобы узнать, файл/путь является локальным или удаленным?) он показан для оценки cmd, но я ищу способ C++/Qt.
Относится к:
В Qt нет возможности, по крайней мере, до Qt 5.5. Наиболее подходящим будет QStorageInfo, но нет единого мнения о том, как такой API должно выглядеть так (см. гигантское обсуждение, которое началось в этой теме; в основном есть риск, что Qt сообщит вводящую в заблуждение информацию).
Итак, на данный момент вы можете использовать нативные API. Вышеупомянутый GetDriveType подойдет для Windows, но в Linux и Mac вы будете предоставлены сами себе.
вы можете использовать функцию GetDriveType:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364939(v=vs.85).aspx
Недавно я отправил запрос функции именно по этому вопросу: https://bugreports.qt.io/browse/QTBUG-83321
Там появился возможный обходной путь. Используя следующее перечисление:
enum DeviceType {
Physical,
Other,
Unknown
};
Я мог бы надежно проверить, является ли монтирование локальным устройством или чем-то еще (возможно, сетевым монтированием), используя следующую функцию в Linux, Windows и macOS:
DeviceType deviceType(const QStorageInfo &volume) const
{
#ifdef Q_OS_LINUX
if (QString::fromLatin1(volume.device()).startsWith(QLatin1String("/"))) {
return DeviceType::Physical;
} else {
return DeviceType::Other;
}
#endif
#ifdef Q_OS_WIN
if (QString::fromLatin1(volume.device()).startsWith(QLatin1String("\\\\?\\Volume"))) {
return DeviceType::Physical;
} else {
return DeviceType::Other;
}
#endif
#ifdef Q_OS_MACOS
if (! QString::fromLatin1(volume.device()).startsWith(QLatin1String("//"))) {
return DeviceType::Physical;
} else {
return DeviceType::Other;
}
#endif
return DeviceType::Unknown;
}