如何使用Qt 5.2(C ++)快速检查网络路径

时间:2014-09-22 15:32:14

标签: c++ windows visual-studio-2012 networking qt5

我希望这是一个相当简单的问题。

在Qt应用程序中,我经常访问工作组网络中的Windows PC上的文件夹。网络路径的格式为"\\NETWORKDEVICE\folder"或沿着这些行。为了检查路径是否存在,我一直在使用QDir,如下所示:

pathString = "somepathhere";
if(QDir(pathString).exists())
    workHere(pathString);

在其他情况下,我使用QUrl使用Windows资源管理器打开特定文件或文件夹,如下所示:

pathString = "somepathhere";
QUrl url = pathString;
QDesktopServices::openUrl(url);

我可以将两者混合在一起,以确保预先存在路径。

pathString = "somepathhere";
if(QDir(pathString).exists())
{
  QUrl url = pathString;
  QDesktopServices::openUrl(url);
{

问题在于每当我使用QDir :: exists()时,如果路径当前处于脱机状态或者程序运行的那台PC连接不良,Windows会将应用程序挂起40秒在返回QDir :: exists()的答案之前。 (如果你试图在资源管理器中打开一个向下的网络路径,你会看到同样的反应;地址栏在搜索时只用绿色缓慢填充,直到它放弃。)

这是一个非常漫长的时间让我的程序等待响应,所以我想知道是否有人对如何处理这种情况有任何更好的想法。我可能会忽略一些设置或替代功能,但截至目前我的想法不合适。我希望使用此代码来确保在指定的文件和文件夹脱机时访问我的备用文件和文件夹。

非常感谢您的帮助,如果我错过了网站上的任何规则或礼仪,我深表歉意。

1 个答案:

答案 0 :(得分:0)

我相信,如果OS调用(并且在所有QT包装器之后,有一个操作系统调用)挂起一段时间,那么你就不能立即得到任何有用的结果。如果是这样,你可以做的最好的事情就是把这个工作放到另一个线程中,并在完成后向主线程发出信号。在主线程中,您可以在某处打印某些状态,或者使用"等待..."在上面签名。