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