0

是否可以找出驱动器路径(例如 P:/temp/foo)是本地的还是远程的?

在这里(CMD 行来判断文件/路径是本地的还是远程的?)它显示用于 cmd 评估,但我正在寻找 C++/Qt 方式。

相关:

  1. QDir::exists 与映射的远程目录
  2. 如何在 C++ 中执行跨平台异步文件 I/O
4

3 回答 3

3

在 Qt 中没有办法,至少到 Qt 5.5。QStorageInfo将是最合适的,但是对于这样的 API 应该是什么样子没有达成一致意见(请参阅在这个线程中开始的巨大讨论;基本上是 Qt 报告误导性信息的一个风险)。

因此,现在,您可以使用本机 API。前面提到的 GetDriveType 对 Windows 来说很好,但在 Linux 和 Mac 上你几乎是靠自己的。

于 2015-02-09T17:19:59.813 回答
2

您可以使用 GetDriveType 函数:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa364939(v=vs.85).aspx

于 2015-02-09T16:59:28.407 回答
2

我最近提交了一个关于这个确切问题的功能请求: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;
}
于 2020-04-08T15:05:46.520 回答