【问题标题】:Handling possible errors with network drive file I/O处理网络驱动器文件 I/O 可能出现的错误
【发布时间】:2009-01-28 19:33:58
【问题描述】:

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

我需要能够处理哪些可能的错误情况?

如何在测试中模拟这些错误情况?

如何获取有关特定错误的详细信息?例如,如果fopen() 失败,errno 会告诉我我需要知道的一切,还是我需要获取GetLastError() 的值?

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

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

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

【问题讨论】:

    标签: windows networking file error-handling


    【解决方案1】:

    我相信你从错误的角度来处理这个问题。应用程序本身几乎无法改善本质上是网络文件系统驱动程序的问题,也许除了实现网络 I/O 本身之外。话虽如此,您最好还是根据自己的需要选择合适的网络文件系统。查看维基百科上的this

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

    所以我会说你应该检查 errno 以防出现错误。万一写入远程文件失败(如果网络文件系统本身不能处理),可能会回退到本地存储。

    【讨论】:

    • 将我们的客户切换到新的网络文件系统会很困难,但您帮助我重新思考了我们如何以及为什么使用网络文件以及我们应该如何处理错误。谢谢。
    猜你喜欢
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 2021-02-23
    • 2012-01-16
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    相关资源
    最近更新 更多