2016-10-18 169 views
-7

我正在尋找迭代兩個目錄。我知道可用的選項to iterate through each directory並將其中找到的所有詳細信息的列表存儲在列表中。我想知道是否有一種更好的方式在C#中實現這一點,而無需遍歷每個目錄並將詳細信息存儲在單獨的列表中。要求是在遍歷目錄中的所有內容時,我想比較每個項目該目錄到第二個目錄中的目錄遍歷兩個目錄

+2

你試過了什麼?具有並行化和線程安全集合類型的東西。 – CodeCaster

+1

你爲什麼需要這個?你只是想要任意的文件對嗎?或者你想找到像匹配文件的東西?它可以像Directory.EnumerateFiles(...).zip(Directory.Enumerate.Files(...),...)...'... – Haukinger

+1

那麼簡單?你確切的要求是什麼?它可以用linq連接來解決。 – Arshad

回答

6

我想知道是否有更好的方式在C#中實現此目的,而無需遍歷每個目錄並將詳細信息存儲在單獨的列表中。

在兩個目錄上使用EnumerateFiles,將zip-join連接起來,然後通過foreach循環運行連接。

var firstFiles = Directory.EnumerateFiles(...); 
var secondFiles = Directory.EnumerateFiles(...); 
var joined = firstFiles.Zip(secondFiles, 
    (first, second) => new { First = first, Second = second }); 
foreach(var pair in joined) 
{ 
    // now do something with pair.First and pair.Second 
} 
+0

精確的答案。非常感謝你。在我必須經歷的所有審訊之後,我無法避免「謝謝」。 – Pete

+2

@Pete:一個幸運的猜測;你的問題很不明確。 –

+3

@Pete:請記住,「同時」具有非常具體的含義;這意味着兩件事實際上同時發生,而這對單個磁盤來說非常困難。 I/O事件的時間可能非常棘手;如果你有一個性能問題,包括在磁盤上等待的高延遲,那麼你不需要同時性,你想要的是相反的。你想要一個異步工作流程。 –