0

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

“无法访问网络位置”

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

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

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

4

3 回答 3

1

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

于 2020-03-04T07:36:40.647 回答
0

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

于 2020-03-05T08:00:27.160 回答
0

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

您可以使用两种方法:

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

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

于 2020-03-04T13:00:47.367 回答