我正在研究一个在同一个远程机器上复制大文件的高效解决方案,我们称之为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