2009-02-17 57 views
12

如果我的.NET客户端使用System.IO.File.Copy将文件从复制\ server1的\为share1 \ FILE1.TXT\ sever1 \ SHARE2 \ FILE2.TXT,并在文件的数据得到读直到客户端,然后写回服务器?如果是的话,.NET客户端能否以任何方式将服务器上的文件复制到同一台服务器上的另一个位置,而不会使文件翻转?如果目标份额与源份额相同,它是否有所作为?从网络共享File.Copy()共享到同一台计算机上的另一个共享通过网络复制文件?

回答

7

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

2

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

+0

为什么不投票他的问题呢?也许你已经和它被再次拒绝了,但似乎很多人忘了投票提出好问题。 – Ash 2009-02-17 03:12:25

+0

感谢+1和感谢您的工具提示。一旦我接近它,我会用工具的输出更新我的问题,作为接受的“是”答案的证明。 – flipdoubt 2009-02-18 13:32:41

4

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

0

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

7

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

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

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

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

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