.NET 4.0에는 열거 방식을 통해 스트리밍 방식으로 디렉터리에 파일을 가져 오는 멋진 새로운 방법이 있습니다.Directory.EnumerateFiles => UnauthorizedAccessException
여기에서 문제는 모든 파일을 열거하기를 원한다면 어떤 파일이나 폴더가 액세스 보호되어 있는지 미리 알지 못하고 UnauthorizedAccessException을 throw 할 수 있다는 것입니다.
한 막 단편을 실행할 수 있고, 재현이 .NET 방법은 대략 방법 복귀 문자열 배열 재귀 반복기를 구현하여 동일한 효과를 얻을 수 있었다 존재foreach (var file in Directory.EnumerateFiles(@"c:\", "*", SearchOption.AllDirectories))
{
// whatever
}
전에. 그러나 새로운 .NET 방법만큼이나 게으른 것은 아닙니다.
그럼 어떻게해야합니까? 이 메소드를 사용하면 UnauthorizedAccessException을 억제 할 수 있습니까?
메서드에 예외를 처리하기위한 작업을 수락하는 오버로드가 있어야합니다.
것은 예, 덤프() 메소드가하려고하는 파일 문제에 탄력적이어야한다 : 당신이있는 사람을 제외한 모든 하위 디렉터리에서 모든 파일을 가져 액세스 예외를 던졌다 그래서이 그 예외를 처리하는 더 좋은 방법이 될 것입니다 덤프. 과부하를주십시오. –
그건 내 문제가 아니야. 한스. 문제는 파일 반복자 (EnumerateFiles)를 foreaching하면 UnauthorizedAccessException가 발생하고 차례로 더 많은 열거가 중지되므로 철저한 결과 집합을 원할 때 바람직하지 않습니다. –
@Hans -'Dump()'메서드는 문제가 아니며 단지 문자열 열거를 처리합니다. 문제는'Directory.EnumerateFiles' 메소드 자체입니다. 그리고 나는 문제를 처리 할 방법이 있다고 생각하지 않는다. 'SearchOption.TopDirectoryOnly'에 의지하여 직접 재귀를 처리해야합니다. – Mormegil