是否可以找出驱动器路径(例如 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;
}