我正在研究一個在同一個遠程機器上覆制大文件的高效解決方案,我們稱之爲FILESERVER。然後,從另一臺服務器(WEBSERVER)我想遠程發佈這些文件的副本,所以我試圖使用Windows資源管理器將文件複製/粘貼到同一個遠程共享文件夾中,並且我注意到它不需要通過網絡,所以我認爲使用共享文件夾,並簡單地從WEBSERVER複製文件可以做到這一點。如何在同一個遠程機器上有效地複製UNC路徑
所以,我試了一下下面的代碼。
File.Copy("\\FILESERVER\FOLDER\bigfile", "\\FILESERVER\FOLDER2\bigfile");
這可以工作,但我注意到它實際上是通過網絡移動文件內容,這正是我想要避免的。我不想在FILESERVER中實現一個服務器來接收命令來複制文件,如果我可以用內置的Windows機制來完成的話。所以我想要實現的行爲是相同的Explorer,從我的C#代碼中調用它。那麼,.NET中可以做到這一點嗎?
編輯: 我試過XCOPY命令,起初它似乎沒有使用網絡。 但經過一些重新啓動以確保它不涉及任何操作系統緩存時,我注意到當我從cmd執行XCOPY時,它不會在Process Explorer/taskmgr中顯示任何I/O,但是,當我從C#執行此命令時它的代碼。所以我認爲它確實使用網絡來獲取/寫入文件內容,但出於奇怪的原因,這些診斷工具(taskmgr/Process Explorer)未報告它。
它可能可以處理舊的shell對象 - 請參閱https://msdn.microsoft.com/en-us/library/windows/desktop/bb787866(v=vs.85).aspx(theren 'C#示例,但它可能會讓你開始)。它具有不顯示標準Windows資源管理器副本對話框的標誌,因此它看起來應該與Windows資源管理器使用的API相同。 –
嘗試使用命令行中的COPY命令。如果是這樣,使用'proc = new ProcessStartInfo(「cmd」,「/ c COPY \\ FILESERVER \ FOLDER \ bigfile \\ FILESERVER \ FOLDER2 \ bigfile」)運行它; ... proc.Start();' – Codo
那麼我必須再次嘗試XCOPY,但我注意到它也通過網絡移動內容。我做了評論,說它工作,但我不得不再次嘗試。 – jorgonor