> 백엔드 개발 > C++ > Directory.GetFiles를 사용할 때 UnauthorizedAccessException을 어떻게 처리할 수 있습니까?

Directory.GetFiles를 사용할 때 UnauthorizedAccessException을 어떻게 처리할 수 있습니까?

Susan Sarandon
풀어 주다: 2025-01-07 15:18:40
원래의
584명이 탐색했습니다.

How Can I Handle UnauthorizedAccessException When Using Directory.GetFiles?

액세스 제한으로 인해 Directory.GetFiles 메서드에서 발생한 예외

네트워크 파일 시스템이나 통제된 환경의 파일 시스템에 액세스할 때 특정 폴더에 대한 액세스가 제한될 수 있습니다. 이로 인해 Directory.GetFiles와 같은 메서드에서 예외가 발생하여 프로그램 실행이 중단됩니다.

문제 분석

Directory.GetFiles 메서드가 액세스할 수 없는 디렉터리를 발견하면 UnauthorizedAccessException 예외가 발생합니다. 안타깝게도 이 예외가 발생하기 전에는 메서드가 실패하여 복구할 수 없습니다.

해결책: 디렉토리를 하나씩 감지

이 문제를 해결하려면 전체 디렉토리 트리를 재귀적으로 검색하는 대신 한 번에 하나의 디렉토리를 검색하는 것이 좋습니다. 이렇게 하면 프로그램이 조기 종료되는 것을 방지하면서 디렉터리별로 예외를 포착하고 처리할 수 있습니다.

구현예

다음은 액세스가 거부된 디렉터리의 파일을 제외하고 디렉터리 트리를 반복하고 목록에 파일 경로를 추가하는 방법의 예입니다.

<code class="language-csharp">private static void AddFiles(string path, IList<string> files)
{
    try
    {
        foreach (string file in Directory.GetFiles(path))
        {
            files.Add(file);
        }

        foreach (string subdirectory in Directory.GetDirectories(path))
        {
            AddFiles(subdirectory, files);
        }
    }
    catch (UnauthorizedAccessException ex)
    {
        // 忽略无法访问的目录,继续处理其他目录
    }
}</code>
로그인 후 복사

이 방법을 사용하면 액세스 권한이 없는 디렉터리를 만나더라도 프로그램이 계속 실행되어 액세스 권한이 있는 디렉터리의 파일을 처리할 수 있습니다. 이 개선된 버전에서는 ToList().ForEach() 사용을 피하고 더 명확하고 읽기 쉬운 foreach 루프를 사용하여 코드의 유지 관리 가능성이 향상되었습니다.

위 내용은 Directory.GetFiles를 사용할 때 UnauthorizedAccessException을 어떻게 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿