我正在创建一个文件复制程序,它将使用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();
}
我没有为每个文件创建流程,而是在寻找更好的方法,这在性能和设计方面都很好。有人可以提出更好的方法吗?
答案 0 :(得分:12)
这个问题有点陈旧,但我想我会回答帮助仍然落在它上面的人。我写了一个名为RoboSharp(https://github.com/tjscience/RoboSharp)的库,它将Robocopy的所有优点带到了c#。如果您需要在c#中使用Robocopy的强大功能,请查看。
答案 1 :(得分:2)
您应该循环调用File.Copy
。
答案 2 :(得分: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
}
答案 3 :(得分:2)
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
答案 4 :(得分:0)
.cmd有以下行
Start ROBOCOY src dest a* b* c* /z /w:1 r:1
Start ROBOCOY src dest d* e* f* g* /z /w:1 r:1
Start ROBOCOY src dest h* K* P* Y* /z /w:1 r:1
Start ROBOCOY src dest xry* srp* /z /w:1 r:1
当我跑> Robocopy sample.cmd 我按照上面的命令同时开始4个多个窗口同时复制文件,它等待 对于另一个文件,因为它有等待时间,如果另一个进程正在使用该文件。是更多 因为它同时工作更快。
现在我正在使用C#窗口开发GUI以运行该过程而不是命令控制台和
启动
main()
{
process.start( "path of sample.cmd" )
process.waitforexit()
label.text=" sucessful copy"
}
但是,如果它控制了一个进程,即cmd.exe,并且有4个robocopy进程 任务管理器。当cmd.exe进程完成时,它将光标返回到label.text“成功 已完成“。虽然仍然存在robocopy进程。您可以看到robocopy窗口 进行复制过程。
以下是问题:我想控制所有进程(cmd.exe和robocopy.exe) 以编程方式在C#中,这样当label.text只显示“成功完成”时 当所有命令都成功完成时“,如果一个命令失败,则GUI中没有任何意义。
选项2(类似于上面写的Biju):从中删除robocopy命令脚本是否更好 sample.cmd(批处理文件)文件并编写代码来运行C#中的4个robocopy行,但是如何运行 robocooy脚本行写的.cmd文件,因为他们也有参数。我的代码运行每个robocopy 然后每个进程将返回到下一行代码,如果失败,我们可以捕获错误和 显示在消息框中。
希望这会有所帮助......但是,如果有人可以改进的话,我正在寻找更好的方法。