File.Copy()从网络共享到同一台机器上的另一个共享是否通过网络复制文件?

时间:2009-02-17 02:28:02

标签: .net windows networking

如果我的.NET客户端使用 System.IO.File.Copy 将文件从 \ server1 \ share1 \ file1.txt 复制到 \ sever1 \ share2 \ file2.txt ,文件的数据是否被读取到客户端,然后写回服务器?如果是,是否有任何方式.NET客户端可以将服务器上的文件复制到同一服务器上的另一个位置而不会往返文件?如果目标共享与源共享相同,它会有所不同吗?

5 个答案:

答案 0 :(得分:7)

是的。我可以通过在机器之间复制10 GB Zip文件的个人经验来说明这一点。 “客户”机器位于美国不同的海岸,而不是其他两台机器。在两台机器之间直接从其中一台机器花费了合理的时间。试图从另一个海岸的机器上启动副本需要大约10个小时:(

答案 1 :(得分:7)

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

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

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

第二个问题是,如何避免这次往返?以下是一些建议:

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

答案 2 :(得分:4)

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

如果可以移动而不是复制,那应该立即发生。否则,您需要在目标计算机上放置一个服务,以便远程调用它。