File.Copy()从networking共享到另一个共享在同一台机器上通过networking复制文件?

如果我的.NET客户端使用System.IO.File.Copy将文件从\ server1 \ share1 \ file1.txt复制到\ sever1 \ share2 \ file2.txt ,文件的数据会被读取到客户端,然后写回到服务器? 如果是的话,有什么办法的.NET客户端可以将服务器上的文件复制到同一台服务器上的另一个位置,而不会绕过文件? 如果目的地份额与源份额相同,是否有所作为?

是的,它确实。 我可以从个人经验中说,在机器之间复制10 GB Zip文件。 “客户”机器与其他两台机器在美国不同的海岸上。 两台机器之间直接从他们那里拿了一个合理的时间。 尝试从另一个海岸的机器上启动复制需要约10小时:(

这是一个古老的问题,但我不认为这里有一个正确的答案。

实际上有两个问题(三个问题,但第三个是多余的)。

第一个问题是,如果在第三个客户端机器上运行的.Net进程将文件从一个网络共享复制到另一个网络共享,那么如果源和目标共享位于同一台计算机上(与客户机不同)vs 2台不同的电脑? 答案显然不是。 网络共享之间没有机制,没有秘密隧道。 数据必须传送到客户端,然后到达另一个分享端。 如果操作是复制或移动操作,这并没有什么不同,如果共享与客户端位于同一台计算机上(实际上,您使用UNC路径作为网络共享访问文件夹,而不是作为本地文件夹)。

第二个问题是,如何避免这种往返? 这里有一些建议:

  1. 如果源和目标在同一个共享上,移动文件不需要往返,因为操作系统只更新文件系统中的引用。
  2. 在源机器或目标机器上运行的进程可以执行副本,而无需往返于客户机。 如果任何一台主机运行Linux,这个过程可以是远程复制等。 在Windows主机上,您可以安装一个WCF服务,在请求从客户端到达时复制文件。

文件内容必须通过执行复制操作的机器。 解决这个问题的唯一方法就是在没有客户端机器的情况下在目标机器上运行程序。 如使用FTP将服务器传输到服务器的FXP 。
然而,打开这条通路也可能会造成安全漏洞,我怀疑很多管理人员都不愿意这样做。

这是一个很好的问题 – 我似乎找不到任何明确的答案,所以也许最好的办法是启动Wireshark进行测试。

如果可以做一个移动而不是一个副本,这应该立即发生。 否则,您需要在目标机器上放置一个服务,以便您可以远程调用它。