【问题标题】:C++ std::filesystem::copy fail with "Network location cannot be reached"C++ std::filesystem::copy 因“无法访问网络位置”而失败
【发布时间】:2020-03-05 16:00:27
【问题描述】:

我编写了一个小型 c++ 应用程序,它在 Windows 启动后在几个客户端上自动启动。此应用程序会将文件从网络共享(所有客户端的相同网络共享)复制到本地磁盘。当我一次重新启动所有客户端时,其中一些客户端会从 std::filesystem::copy 函数收到错误 1231,并显示以下消息:

“无法到达网络位置”

如果我以几秒钟的间隔重新启动所有客户端,那么就没有问题。 这让我觉得复制功能可能会在复制过程中阻止文件。

是否有一些我缺少的设置可以防止这种情况发生?这是正常行为吗?

编辑:我已经能够解决网络问题,但是我现在收到错误 32,指出“该进程无法访问该文件,因为它正被另一个进程使用”。复制功能是否会锁定当前正在复制的文件?

【问题讨论】:

  • 睡眠/等待客户端在启动/启动应用程序之前完成初始化。 ERROR_NETWORK_UNREACHABLE - 1231 (0x4CF) - Windows 操作系统上的网络错误

标签: c++ c++17 std-filesystem


【解决方案1】:

听起来更像是尚未安装网络共享。如果所有客户端都尝试同时挂载相同的网络共享,这可能意味着分发共享的服务器需要做大量工作。因此,一些客户端可能会超时并且可能不得不重复他们的请求。在尝试从中复制之前,请确保网络共享已实际挂载。

【讨论】:

    【解决方案2】:

    由于您的客户端工作站网络未初始化,您遇到了问题。 错误 ERROR_NETWORK_UNREACHABLE - 1231 (0x4CF) 表示提供的路径在实例中不可访问。

    您可以使用两种方法:

    1) 继续while-loop,直到成功检查文件路径是否存在。如果有的话,用 try-catch 处理错误情况。 当你获得成功去下载/复制。

    2) 在当前程序中下载/复制文件之前休眠 60 秒到 180 秒。

    【讨论】:

      【解决方案3】:

      我编辑了我的问题; Active Directory 确实存在问题,客户端没有立即获得 IP 地址,因此无法访问共享。 经过更多测试,我现在看到我只能使用 std::filesystem::copy 在其中一个客户端上执行复制命令,而其他客户端则显示错误消息 32,指出“进程无法访问文件因为它正被另一个进程使用”。如果我在批处理文件中同时在所有设备上使用 xcopy 命令,则不会出现任何错误...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-06
        相关资源
        最近更新 更多