如果我的.NET客户端使用System.IO.File.Copy将文件从\ server1\share1\file1.txt复制到\ sever1\share2\file2.txt,文件的数据是否会被读取到客户端然后写回到服务器?如果是,是否有任何方式.NET客户端可以将服务器上的文件复制到同一服务器上的另一个位置而不会往返文件?如果目标共享与源共享相同,它会有所不同吗?
是的,它确实.我可以通过在机器之间复制10 GB Zip文件的个人经验来说明这一点."客户"机器位于美国不同的海岸,而不是其他两台机器.在两台机器之间直接从其中一台机器花费了合理的时间.试图从其他海岸的机器启动副本花了~10小时:(
这是一个老问题,但我不认为这里有正确的答案.
事实上有2个问题(3个问题,但第3个问题是多余的).
第一个问题是,如果在(第三个)客户端计算机上运行的.Net进程将文件从一个网络共享复制到另一个网络共享,如果源和目标共享位于同一台计算机上(与客户端不同),它是否会有所不同)vs 2台不同的电脑?答案显然不是.网络共享之间没有机制,没有秘密隧道.数据必须传送到客户端,然后传送到其他共享.如果操作是复制或移动,它没有区别,如果共享与客户端在同一台计算机上,它实际上没有区别(并且您实际上使用UNC路径访问文件夹作为网络共享而不是作为本地文件夹).
第二个问题是,如何避免这次往返?以下是一些建议:
如果源和目标位于同一共享上,则移动文件不需要往返,因为操作系统仅更新文件系统中的引用.
在具有源或目标共享的计算机上运行的进程可以执行复制,而无需往返客户端.如果任一主机运行Linux,则此过程可以是远程副本等.在Windows主机上,您可以安装WCF服务,该服务在请求从客户端到达时复制文件.