2012-01-30 4 views
2

그래서 나는 MS 기사 http://msdn.microsoft.com/en-us/library/ms171645.aspxC#을 트 리뷰 무단 예외

이것은 디자이너를 사용하여 ListView에와 트 ​​리뷰 컨트롤 탐색기 스타일 인터페이스를 생성한다 따랐다.

그래서 모두가 잘 howerver, 내가

{"Access to the path '<path to file' is denied."} VS 2010 포인트 문제가이 자리를받을 모든 폴더와 파일 등을 검사 할 C의 루트로 설정입니다.

subSubDirs = subDir.GetDirectories();

나는 이것이 예외가 발생 된 후 howerver, 응용 프로그램은 계속되지 않습니다입니다 주위에 시도 캐치를 넣을 수 있습니다.

앱에서 액세스 할 수없는 디렉토리를 건너 뛸 수있는 방법이 있습니까?

+0

'try ''catch'를 넣은 곳을 포함하여 코드를 게시하십시오. – ChrisF

+0

나에게 권한 문제가 있다고 생각합니다. C :의 루트에 액세스하려고 할 가능성이 가장 높습니다 (Windows의 새로운 버전은 그 주위에 약간의 보호 기능을 가지고 있다고 생각합니다). ChrisF가 말했듯이 코드를 게시하면 더 나은 대답을 얻을 수 있습니다. – Tim

답변

0

잘못된 시도를 시도했을 수 있습니다.

바꾸기 :이와

subSubDirs = subDir.GetDirectories(); 

: 또한

try 
{ 
    subSubDirs = subDir.GetDirectories(); 
} 
catch(UnauthorizedAccessException uae) 
{ 
    //log that subDir.GetDirectories was not possible 
} 

라인 :

if (subSubDirs.Length != 0) 
보행의 코드를 바탕으로이 같은 시도 캐치를 둘 수 있었다

은 다음과 같이 변경해야합니다.

if (subSubDirs != null && subSubDirs.Length != 0) 
0

호출하는 계정에 System Volume Information과 같은 폴더에 대한 액세스 권한이 없으므로 예외가 발생합니다. Linq를 사용하고 System 또는 Hidden으로 표시된 폴더를 건너 뛰면이 일부를으로 가져올 수 있습니다.

DirectoryInfo root = new DirectoryInfo(@"C:\"); 

Func<FileSystemInfo, Boolean> predicate = dir => 
    (dir.Attributes & FileAttributes.System) != FileAttributes.System && 
    (dir.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden; 

IEnumerable<FileSystemInfo> directories = root.GetDirectories().Where(predicate); 

foreach (DirectoryInfo directory in directories) { 
    try { 
     Trace.WriteLine(directory.Name); 
     DirectoryInfo[] subdirectories = directory.GetDirectories(); 
    } 
    catch (System.UnauthorizedAccessException) { 
     Trace.WriteLine("Insufficient access rights."); 
    } 
} 

Trace.WriteLine("End of application."); 

이 비록 모든 시나리오에 대한 해결책이 아니며, 일부 파일과 폴더에 실패합니다. 기존 API를 사용하는 쉬운 해결책은 없습니다. 대신 WMI를 통해 파일 및 디렉토리 정보를 얻는 방법을 살펴볼 수 있습니다.