在没有20秒超时的情况下确定网络驱动器上是否存在文件

时间:2013-04-19 14:46:51

标签: c++ windows networking boost

是否有一种简单的方法可以确定远程系统上的文件是否存在,如果不存在20-25秒,则不存在?

像...这样的功能

PathFileExists();
GetFileAttributes();

...不允许您设置超时持续时间,因此当文件不存在时,您最终会等待很长时间。我认为有可能将其中一个调用放入一个线程并将线程设置为在1秒(或其他)后过期,但我更喜欢使用轻量级本机Windows函数或boost函数而不是一个不优雅的线程解决方案

2 个答案:

答案 0 :(得分:0)

有点难以证明是消极的,但我认为不存在这样的方法。

正常的Windows异步I / O方法使用OVERLAPPED结构,并在其文档中引用ReadFileWriteFile方法。另一方面,GetFileAttributes没有提及OVERLAPPED或异步I / O的变体。因此,假设它始终是同步的,似乎是安全的。

答案 1 :(得分:0)

AFAIK没有,一般没有简单的方法。

如果您的服务器配置为响应ping,您可以使用IcmpSendEcho API在访问服务器的共享文件之前ping服务器,API非常简单并且接受超时。

如果您的服务器没有响应ping(默认情况下现代版本的Windows不响应),您可以编写一个尝试连接到TCP端口135或445的函数,如果已连接关闭连接并返回成功,如果失败的退货错误。这将允许您实现比默认值更短的超时。

在这两种方法中,您都需要将网络驱动器路径解析为服务器名称,例如, GetVolumePathName API。