Dot-Net

File.Copy() 從網路共享到同一台機器上的另一個共享是否通過網路複製文件?

  • August 17, 2011

如果我的 .NET 客戶端使用System.IO.File.Copy將文件從**\server1\share1\file1.txt複製到\sever1\share2\file2.txt**,文件的數據是否會被讀取到客戶端然後寫回到伺服器?如果是,.NET 客戶端是否可以將伺服器上的文件複製到同一伺服器上的另一個位置,而無需往返文件?如果目標共享與源共享相同,是否會有所不同?

是的,它確實。我可以根據在機器之間複製 10 GB Zip 文件的個人經驗來這麼說。“客戶端”機器與其他兩台機器位於美國的不同海岸。在兩台機器之間直接從其中一台機器上花費了相當長的時間。嘗試從另一個海岸的機器上啟動副本花了大約 10 個小時:(

這是一個老問題,但我認為這裡沒有正確的答案。

實際上有 2 個問題(3 個問題,但第 3 個問題是多餘的)。

第一個問題是,如果在(第 3 台)客戶端電腦上執行的 .Net 程序將文件從一個網路共享複製到另一個網路共享,如果源共享和目標共享位於同一台電腦上(不同於客戶端),是否會有所不同? ) 與 2 台不同的電腦?答案顯然不是。網路共享之間沒有機制,也沒有秘密隧道。數據必須先傳輸到客戶端,然後再傳輸到另一個共享。如果操作是複製或移動,則沒有區別,如果共享與客戶端位於同一台電腦上,則實際上沒有區別(並且您確實使用 UNC 路徑作為網路共享訪問文件夾,而不是作為本地文件夾)。

第二個問題是,如何避免這種往返?以下是一些建議:

  1. 如果源和目標在同一個共享上,則移動文件不需要往返,因為作業系統只更新文件系統中的引用。
  2. 在具有源共享或目標共享的電腦上執行的程序可以執行複制,而無需往返客戶端。如果任一主機執行 Linux,則此過程可以是遠端複製等。在 Windows 主機上,您可以安裝 WCF 服務,當請求從客戶端到達時復製文件。

引用自:https://stackoverflow.com/questions/555341