2016-10-18 2 views
-7

두 개의 디렉토리를 반복적으로 탐색하려고합니다. 나는 유효한 선택권을 알고있다 to iterate through each directory 그리고 그것에서 찾아낸 모든 세부 사항의 명부를 명부에서 저장하는. 각 디렉토리를 반복하고 별도의 목록에 세부 정보를 저장하지 않고도 C#에서이 작업을 수행하는 더 좋은 방법이 있는지 궁금 해서요. 요구 사항은 모든 내용의 디렉토리 중 하나를 반복하면서 필요한 항목을 비교하고 싶습니다. 그 디렉토리에서 두 번째 디렉토리에있는 디렉토리로 이동두 개의 디렉토리를 반복합니다.

+2

무엇을 시도 했습니까? parallellization 및 thread-safe 컬렉션 유형이있는 것. – CodeCaster

+1

왜 이것을 필요로합니까? 파일의 임의의 쌍을 원하십니까? 또는 파일을 검색하는 것과 같은 것을 찾고 싶습니까? 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 이벤트의 타이밍은 매우 까다로울 수 있습니다. 디스크 대기 시간이 길어지는 성능 문제가있는 경우 동시성을 원하지 않으면 반대가 필요합니다.비동기 워크 플로가 필요합니다. –

관련 문제