2016-04-25 23 views
0

想我的文件與目錄路徑的商店名稱,我想用任務LIB複製所有這些存儲在列表中,從目標文件夾到目標文件夾中的文件複製多個文件。C#如何使用任務

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

所以文件名變量有我必須複製的所有文件信息。現在告訴我如何使用任務來複制所有文件,並且還會有一個回調函數告訴我什麼時候所有文件複製完成。尋找新鮮的代碼。

這將是磁盤綁定操作,如果我使用任務的lib複製多個文件,然後同時過程會慢?

任何人都可以發佈一些示例代碼顯示一個如何使用任務將在列表中自動循環播放,其中有路徑文件的存儲和使用任務LIB從一個文件夾複製同步所有文件到另一個文件夾。 感謝

+0

最簡單的將是'Parallel.ForEach()' – Phaeze

+0

將ü介意張貼一些示例代碼複製多個文件同時使用'Parallel.ForEach()' –

+0

在MSDN上讀取它。 – dfdsfdsfsdf

回答

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! 
    }         
}); 
+0

如果我遵循或採用第三方物流,而不是複製一個接一個文件的文件,那麼這將是更快,因爲文件副本將磁盤綁定工作不是CPU綁定我猜。請分享你的建議。謝謝 –

+0

'Parallel.ForEach'可能在複製文件時創建競爭條件。你怎麼想? –

+0

如果你確定你的文件列表中沒有重複項目,那麼你應該沒問題。每微軟:「不要讓並行循環重複的實例如果一個對象出現比輸入環路一次,它可能是兩個並行的線程可以在同一時間更新的對象。」當兩個或多個獨立進程或線程嘗試修改單個資源時,競爭條件就存在。只要你不想多次拷貝同一個文件,或者複製兩個或更多的文件到同一個目標文件,那麼你應該沒問題。 – Robert