移动和复制远程文件

问题描述:

我需要使用C#备份位于远程计算机上的文件。移动和复制远程文件

例如:“\ server1 \ docs \ test.txt”需要被复制或移动到“\ server1 \ docs \ backup \ test.txt”。

问题:当我使用File.Copy时,是否将文件从服务器移动到我的机器,然后回到服务器 - 实际上是通过网络使文件四舍五入?

我想避免往返。

详细信息:这两台机器都是在同一个域上的Windows操作系统。

注意:我希望你们知道我已经搜遍了这个问题的答案,但是,我发现了矛盾的答案。我想确切地知道。感谢您的时间。

+0

[SMB协议在远程共享之间复制文件]可能重复(http://*.com/questions/31944769/smb-protocol-for-copying-files-between-remote-shares) – Av4t4r

您应该从服务器运行此命令以避免数据的往返运行。请记住,如果您尝试使用的文件位于同一个硬盘驱动器上,移动它们会比复制它们更快。

+0

我的处境赢得了'允许我将任何进程添加到远程服务器。如果我只是重命名远程文件会发生什么?这会阻止往返吗? –

+0

您不能使用powershell或ps工具登录到远程计算机并从那里发布副本吗? – user1845593

+0

我不明白这会有什么不同。您正在使用客户端来复制文件,这意味着服务器必须首先将字节发送到客户端,而在您的情况下,客户端只会将它们发回到另一个文件夹。除非你可以在同一台机器上运行这个拷贝(即使是一个.bat文件对于这种工作来说也是很好的),你就会陷入一种双向循环。 – Av4t4r

只看C#的源代码(http://referencesource.microsoft.com/#mscorlib/system/io/file.cs,4a0905e7dc32d77d)似乎File.Copy调用Win32Native.CopyFile函数。说实话,我不知道它到底做了什么,我的意思是我从来没有看到过这些代码,但我猜这没有什么魔力,它从远程计算机读取字节并写入其他远程计算机。

编辑

一种替代方法是通过的powershell登录到远程服务器(可以调用通过C#PS脚本),并执行该命令以复制到第二机器。

+0

我对自己感到惊讶,关于从远程机器复制,移动和重命名文件的实际过程没有太多文档。我发现了堆栈溢出的几种解决方案,但答案各不相同。 –

+1

原生win32文件拷贝到底取决于很多因素。在使用的Windows版本上(两侧),网络访问类型(SMB/NFS/...)......无法给出简单的答案。 –