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