是否有一种简单的方法可以确定远程系统上的文件是否存在,如果不存在20-25秒,则不存在?
像...这样的功能
PathFileExists();
GetFileAttributes();
...不允许您设置超时持续时间,因此当文件不存在时,您最终会等待很长时间。我认为有可能将其中一个调用放入一个线程并将线程设置为在1秒(或其他)后过期,但我更喜欢使用轻量级本机Windows函数或boost函数而不是一个不优雅的线程解决方案
答案 0 :(得分:0)
有点难以证明是消极的,但我认为不存在这样的方法。
正常的Windows异步I / O方法使用OVERLAPPED
结构,并在其文档中引用ReadFile
和WriteFile
方法。另一方面,GetFileAttributes
没有提及OVERLAPPED
或异步I / O的变体。因此,假设它始终是同步的,似乎是安全的。
答案 1 :(得分:0)
AFAIK没有,一般没有简单的方法。
如果您的服务器配置为响应ping,您可以使用IcmpSendEcho
API在访问服务器的共享文件之前ping服务器,API非常简单并且接受超时。
如果您的服务器没有响应ping(默认情况下现代版本的Windows不响应),您可以编写一个尝试连接到TCP端口135或445的函数,如果已连接关闭连接并返回成功,如果失败的退货错误。这将允许您实现比默认值更短的超时。
在这两种方法中,您都需要将网络驱动器路径解析为服务器名称,例如, GetVolumePathName
API。