C#如何使用任务复制多个文件

时间:2016-04-25 16:07:14

标签: c# task-parallel-library

假设我的文件名称包含列表中的路径存储,我想使用任务lib将列表中存储的所有文件从目标文件夹复制到目标文件夹。

List<string> filename = new List<string>(Enumerable.Range(0,8).
Select(value=>"Z:\report_"+EndDate.Date.AddDays(value).ToString("dd-MM-yyyy")+".csv"));

所以filename变量包含我必须复制的所有文件信息。现在告诉我如何使用任务来复制所有文件,并且还有一个回调函数,告诉我何时所有文件复制完成。寻找新的代码。

这将是磁盘绑定操作,如果我使用任务lib同时复制多个文件,那么进程会变慢吗?

任何人都可以发布一些示例代码来展示如何使用任务,该任务将自动循环存储包含路径的文件的列表,并使用任务lib将所有文件同时从一个文件夹复制到另一个文件夹。 感谢

1 个答案:

答案 0 :(得分:1)

以下是如何使用parallel.foreach循环并行循环遍历多个文件的一个很好的示例:

https://msdn.microsoft.com/en-us/library/dd460720(v=vs.110).aspx

该示例适用于某些位图文件。您只需要替换lambda表达式中的逻辑,将当前文件复制到您希望的位置。

编辑:我根据上面链接中的示例汇总了一些简单的示例代码:

List<string> filename = new List<string>(Enumerable.Range(0, 8).Select(value => "Z:\report_" + EndDate.Date.AddDays(value).ToString("dd-MM-yyyy") + ".csv"));

String targetDirectoryPath = @"c:\my_target_folder\"; //TODO: Set this to your target directory.
bool allowOverwrites = false; //Set this to true if you want to allow overwriting of existing files!

Parallel.ForEach(filename, (currentFilePathToCopy) =>
{
    // The more computational work you do here, the greater 
    // the speedup compared to a sequential foreach loop.
    String currentFilename = System.IO.Path.GetFileName(currentFilePathToCopy);


    string targetFilePath = targetDirectoryPath + currentFilename;

    try
    {
        System.IO.File.Copy(currentFilePathToCopy, targetFilePath, allowOverwrites);
    }
    catch (Exception caughtException)
    {
        //TODO: Handle copy error here!
    }                                
});