Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 找出文件路径是映射的/远程的还是本地的_C++_Qt_Qdir - Fatal编程技术网

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

C++ 找出文件路径是映射的/远程的还是本地的,c++,qt,qdir,C++,Qt,Qdir,是否可以确定驱动器路径(例如p:/temp/foo)是本地还是远程 这里()显示的是cmd求值,但我正在寻找一种C++/Qt方式 有关: 您可以使用GetDriveType函数: 您可以使用GetDriveType函数: 在Qt中没有办法,至少在Qt 5.5之前。这是最合适的,但是对于这样一个API应该是什么样子还没有达成一致意见(请参见开始的巨大讨论;基本上,Qt报告误导性信息是有风险的) 现在,您可以使用本机API了。前面提到的GetDriveType对于Windows来说是不错的,但是

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

这里()显示的是cmd求值,但我正在寻找一种C++/Qt方式

有关:


  • 您可以使用GetDriveType函数:


    您可以使用GetDriveType函数:


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


    现在,您可以使用本机API了。前面提到的GetDriveType对于Windows来说是不错的,但是在Linux和Mac上,您几乎可以自己操作

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


    现在,您可以使用本机API了。前面提到的GetDriveType对于Windows来说是不错的,但是在Linux和Mac上,您几乎可以自己操作

    我最近就这个问题提交了一份功能请求:

    一个可能的解决办法出现了。使用以下枚举:

    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;
    }
    

    我最近就这个问题提交了一份功能请求:

    一个可能的解决办法出现了。使用以下枚举:

    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;
    }
    

    他说他正在寻找一种跨平台的方式,而不是Windows特定的方式。他没有说或者现在你提到了它没有明确地说,但它是用Qt标记的,没有用winapi标记的,也没有提到Windows。。。我的意思是,他可能是针对Linux的,因为我们知道。好的,我重读了他的问题,他说“P:/”,所以我猜这毕竟是Windows。但是OP不是很清楚。不管怎样,有用的提示,当我不能想出一个Qt解决方案时,我会用它作为后备。他说他正在寻找一种跨平台的方式,而不是Windows特定的方式。他也没有说,或者现在你提到了它。他没有明确说,但它是用Qt标记的,没有用winapi标记的,也没有提到Windows。。。我的意思是,他可能是针对Linux的,因为我们知道。好的,我重读了他的问题,他说“P:/”,所以我猜这毕竟是Windows。但OP不是很清楚。不管怎样,有用的提示,当我不能想出一个Qt解决方案时,我会用它作为后备。这是一个Windows特定的问题吗?如果是这样的话,用winapi标记它,没有Qt方法可以做到。我不确定是否有Qt方法可以做到这一点。所以我把它放在一边,当然,独立于平台的方式更可取。实际上,pepe已经指出了一个有趣的方法,我将交叉检查,但我必须在之前迁移到Qt5.4。这两个答案都很有用!谢谢。这是Windows特有的问题吗?如果是这样的话,用winapi标记它,没有Qt方法可以做到。我不确定是否有Qt方法可以做到这一点。所以我把它放在一边,当然,独立于平台的方式更可取。实际上,pepe已经指出了一个有趣的方法,我将交叉检查,但我必须在之前迁移到Qt5.4。这两个答案都很有用!谢谢