使用网络驱动器文件I / O处理可能的错误

时间:2009-01-28 19:33:58

标签: windows networking file error-handling

我正在尝试通过网络驱动器(可能通过WAN或VPN)使文件I / O对于本机C ++ Windows应用程序尽可能可靠...

我需要处理哪些可能的错误条件?

如何在测试中模拟这些错误条件?

如何获取有关特定错误的详细信息?例如,如果fopen()失败,errno是否告诉我需要知道的所有内容,或者我需要获得GetLastError()值吗?

如何可靠地区分“网络驱动器访问功能完全正常但文件不存在”以及网络或服务器的各种问题?

我在桌面上注意到的一个特殊错误情况(不是我们正在开发的应用程序的具体情况)是有时第一次尝试访问网络驱动器上的文件会失败,但它可能会导致驱动器在后台重新连接,因为后续连接工作。我不知道是什么原因引起的。这是我想要正确处理的错误条件的一个例子。

编辑:这适用于使用网络共享上的文件进行节点之间通信的传统分布式应用程序。某些节点可能无人值守,因此将错误传递给最终用户可能不是一种选择。长期目标是切换到更好的协议,但在短期内我想让文件I / O尽可能可靠。

1 个答案:

答案 0 :(得分:1)

我相信你是从错误的角度来看待这个问题。在应用程序本身中几乎没有人能够改进本质上是网络文件系统驱动程序的问题,可能除了实现网络I / O本身之外。话虽这么说,你最好选择适合你需要的网络文件系统。查看维基百科上的this

通常,您的应用程序应该像文件本地存储一样。不要太努力处理网络问题。但是,如果您选择的网络文件系统是好的,那么这些问题可以自动缓解。

所以我说如果出现错误,你应该选择 errno 。在写入远程文件失败的情况下(如果联网文件系统本身不处理此问题),可能会回退本地存储。