현재 사용자가 음악 파일을 저장할 디렉토리와 하위 디렉토리를 검색하여 컬렉션에 추가하는 프로그램이 있습니다. 그러나 그것이 오는 가로 건너 오는 디렉토리 중 하나가 보호되면 프로그램이 넘어집니다. 이 문제를 피하기 위해 검색하기 전에 사용자가 디렉토리에 액세스 할 수 있는지 확인하는 방법을 알고 싶었습니다. 다음은 검색에 사용하는 코드입니다. 현재 "시스템 볼륨 정보"에 대한 기본적인 해결 방법이 있지만 다른 보호 된 디렉터리가있을 수 있으므로이 정보를 포함하도록 변경하려고했습니다.주어진 디렉토리에 대한 액세스 권한을 어떻게 확인할 수 있습니까?
public void SearchForMusic()
{
//Searches selected directory and its sub directories for music files and adds their path to ObservableCollection<string> MusicFound
foreach (string ext in extentions)
{
foreach (string song in Directory.GetFiles(SearchDirectory, ext))
{
musicFound.Add(song);
}
foreach (string directory in Directory.GetDirectories(SearchDirectory))
{
if (directory.Contains("System Volume Information"))
{
}
else
{
foreach (string song in Directory.GetFiles(directory, ext))
{
musicFound.Add(song);
}
foreach (string subDirectory in Directory.GetDirectories(directory))
{
foreach (string subSong in Directory.GetFiles(subDirectory, ext))
{
musicFound.Add(subSong);
}
}
}
}
}
}
많은 감사합니다 :) 당신이 파일 시스템 개체에 액세스 할 수 있는지 확인하는 가장 쉬운 방법으로
+1; @ 조나단 : 예외 처리 ('try' /'catch')는 예외적 인 경우를 위해 예약되어야합니다. 사용중인 API가 당신에게 다른 옵션을주지 않는다면 말입니다. 가능한 모든 경우에 상태 검사 또는 '시도'변형을 사용하십시오. 그래도 여기서 편리하게 볼 수는 없지만 ('GetAccessControl'?). 따라서 예외 핸들러가 붙어있을 수 있습니다. 그러나'UnauthorizedAccessException' (또는 던져진 특정 예외가 무엇이든)을 잡아서 기본 'Exception' 클래스가 아닌지 확인하십시오. –
@Merlyn'try/catch'에 대한 당신의 요지는 유효하지만 결코 행동의 정확성을 무시해서는 안됩니다. 'try/catch'를 피하고 자신의 권한 검사 코드를 구현하면 정상적인 동작에 예외를 사용하지 않는 것에 만족할 수 있지만 프로그램이 제대로 작동하지 않을 때 위안이되지 않습니다. 또한, 내 대답은 오류보다는 오히려 예외를 감지했다. 좋은 파일 처리 API는 TryXXX 변형을 제공해야합니다. –
전적으로 동의합니다. 내 포인트는 기존의 체크 메소드가있을 때, 그리고 관심있는 케이스를 포착 할 수있을 때이다. 자신감을주는 코드를 얻을 수 없다면, 예외 핸들러와 주석 왜 예외를 삼키는거야? –