我希望这是一个相当简单的问题。
在Qt应用程序中,我经常访问工作组网络中Windows PC上的文件夹。网络路径的形式为"\NETWORKDEVICEfolder"
或者沿着这些线路。为了检查路径是否存在,我一直在使用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:existss()的答案。(如果你试图在explorer中打开一条下行网络路径,你会看到同样的反应;在搜索时,地址栏会慢慢填充绿色,直到它放弃。)
对于我的程序来说,等待回应的时间太长了,所以我想知道是否有人对如何处理这种情况有更好的想法。我可能忽略了一些设置或替代功能,但目前我还没有想法。我希望使用这段代码来确保在指定的文件和文件夹脱机时可以访问我的备用文件和文件夹。
非常感谢您的帮助,如果我错过了网站上的任何规则或礼仪,我深表歉意。
我相信,如果操作系统调用(在所有QT包装之后,有一个操作系统调用)挂起一段时间,那么您就无法立即获得任何有用的结果。如果是这样的话,你能做的最好的事情就是把这项工作放到另一个线程中,并在它完成时向主线程发出信号。在主线程中,您可以在某个地方打印一些状态,或者在上面画上"等待…"的美丽图片。