假设我的文件名称包含列表中的路径存储,我想使用任务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将所有文件同时从一个文件夹复制到另一个文件夹。 感谢
答案 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!
}
});