2016-08-30 120 views
0

我需要使用C#備份位於遠程計算機上的文件。移動和複製遠程文件

例如:「\ server1 \ docs \ test.txt」需要被複制或移動到「\ server1 \ docs \ backup \ test.txt」。

問題:當我使用File.Copy時,是否將文件從服務器移動到我的機器,然後回到服務器 - 實際上是通過網絡使文件四捨五入?

我想避免往返。

詳細信息:這兩臺機器都是在同一個域上的Windows操作系統。

注意:我希望你們知道我已經搜遍了這個問題的答案,但是,我發現了矛盾的答案。我想確切地知道。感謝您的時間。

+0

[SMB協議在遠程共享之間複製文件]可能重複(http://stackoverflow.com/questions/31944769/smb-protocol-for-copying-files-between-remote-shares) – Av4t4r

回答

1

您應該從服務器運行此命令以避免數據的往返運行。請記住,如果您嘗試使用的文件位於同一個硬盤驅動器上,移動它們會比複製它們更快。

+0

我的處境贏得了'允許我將任何進程添加到遠程服務器。如果我只是重命名遠程文件會發生什麼?這會阻止往返嗎? –

+0

您不能使用powershell或ps工具登錄到遠程計算機並從那裏發佈副本嗎? – user1845593

+0

我不明白這會有什麼不同。您正在使用客戶端來複制文件,這意味着服務器必須首先將字節發送到客戶端,而在您的情況下,客戶端只會將它們發回到另一個文件夾。除非你可以在同一臺機器上運行這個拷貝(即使是一個.bat文件對於這種工作來說也是很好的),你就會陷入一種雙向循環。 – Av4t4r

0

只看C#的源代碼(http://referencesource.microsoft.com/#mscorlib/system/io/file.cs,4a0905e7dc32d77d)似乎File.Copy調用Win32Native.CopyFile函數。說實話,我不知道它到底做了什麼,我的意思是我從來沒有看到過這些代碼,但我猜這沒有什麼魔力,它從遠程計算機讀取字節並寫入其他遠程計算機。

編輯

一種替代方法是通過的powershell登錄到遠程服務器(可以調用通過C#PS腳本),並執行該命令以複製到第二機器。

+0

我對自己感到驚訝,關於從遠程機器複製,移動和重命名文件的實際過程沒有太多文檔。我發現了堆棧溢出的幾種解決方案,但答案各不相同。 –

+1

原生win32文件拷貝到底取決於很多因素。在使用的Windows版本上(兩側),網絡訪問類型(SMB/NFS/...)......無法給出簡單的答案。 –