找出文件路径是映射/远程还是本地

时间:2015-02-09 16:52:16

标签: c++ qt qdir

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

这里(CMD line to tell if a file/path is local or remote?)显示了cmd评估,但我正在寻找C ++ / Qt方式。

相关:

  1. QDir::exists with mapped remote directory
  2. How to perform Cross-Platform Asynchronous File I/O in C++

3 个答案:

答案 0 :(得分:3)

在Qt中没有办法,至少达到Qt 5.5。 QStorageInfo是最接近的,但是没有就这样的API应该是什么样子达成一致(参见开始的巨大讨论in this thread; Qt报告误导信息基本上有一个风险。)

因此,现在,您可以使用本机API。前面提到的GetDriveType适用于Windows,但你在Linux和Mac上几乎都是自己的。

答案 1 :(得分:2)

答案 2 :(得分:1)

我最近针对以下确切问题提出了功能要求: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;
}