使用机器人复制和处理进行文件复制

Bij*_*mas 10 c# windows copy file robocopy

我正在创建一个文件复制程序,它将使用ROBOCOPY命令复制大小约为50 KB的大量文件(~100,000).

对于每个文件,我创建一个新进程并传递ROBOCOPY命令和参数如下:

using (Process p = new Process)
{
    p.StartInfo.Arguments = string.Format("/C ROBOCOPY {0} {1} {2}", 
            sourceDir, destinationDir, fileName);
    p.StartInfo.FileName = "CMD.EXE";
    p.StartInfo.CreateNoWindow = true;
    p.StartInfo.UseShellExecute = false;                    
    p.Start();
    p.WaitForExit(); 
} 
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种更好的方法,而不是为每个文件创建一个流程,这在性能和设计方面都很好.有人可以提出更好的方法吗?

tjs*_*nce 14

这个问题有点陈旧,但我想我会回答帮助那些仍然落在它上面的人.我写了一个名为RoboSharp的图书馆(https://github.com/tjscience/RoboSharp),它将Robocopy的所有优点带给了c#.看看你是否需要在c#中使用Robocopy的强大功能.


小智 5

Process p = new Process();
p.StartInfo.Arguments = string.Format("/C Robocopy /S {0} {1}", "C:\\source", "C:\\destination");
p.StartInfo.FileName = "CMD.EXE";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.Start();
p.WaitForExit(); 

/C Robocopy -> this is a command to run robocopy
/S -> This will help to copy sub folders as well as Files
Run Code Online (Sandbox Code Playgroud)


小智 2

我只会使用 System.IO。应该足够快,并且您的文件名可以是通配符。

using System.IO;
// snip your code... providing fileName, sourceDir, destinationDir
DirectoryInfo dirInfo = new DirectoryInfo(sourceDir);
FileInfo[] fileInfos = dirInfo.GetFiles(fileName);
foreach (FileInfo file in fileInfos)
{
    File.Copy(file.FullName, Path.Combine(destinationDir, file.Name), true);  // overwrites existing
}
Run Code Online (Sandbox Code Playgroud)

  • 与 ROBOCOPY 相比,File.Copy 确实很慢。正确的? (7认同)
  • 您的答案没有用,因为 File.copy 不具备 robocopy 的所有功能。例如:长路径支持 (6认同)
  • 这不是问题所在 (2认同)