컴퓨터의 다양한 디렉토리 (DirectoryInfo를 통해)를 거쳐야합니다. 그 중 일부는 액세스 할 수 없으며 UnauthorizedAccessException이 발생합니다. 예외를 포착하지 않고 디렉토리 액세스를 어떻게 확인할 수 있습니까?.NET - 예외 처리없이 디렉토리에 액세스 할 수 있는지 확인
10
A
답변
8
Security
네임 스페이스를 사용해야합니다.
this 대답을 참조하십시오. 답변에서
:
FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename);
if(!SecurityManager.IsGranted(writePermission))
{
//No permission.
//Either throw an exception so this can be handled by a calling function
//or inform the user that they do not have permission to write to the folder and return.
}
업데이트 : (다음 댓글) 보안 정책을
FileIOPermission
거래 권한을 특정 파일 시스템 없습니다, 그래서 당신은 DirectoryInfo.GetAccessControl
를 사용해야합니다.
9
간단히 입력 할 수 없습니다. 디렉토리에 액세스 할 수 있는지 확인하는 방법은 없습니다. 액세스 할 수 있다고 판단 할 수있는 것이 전부입니다. 수표가 완료되는 즉시 이유가 변경되어 사용 권한이 변경되고 수표가 무효화됩니다. 구현할 수있는 가장 신뢰할 수있는 전략은 디렉토리에 액세스하여 UnauthorizedAccessException
을 잡는 것입니다.
-1
을 그냥 간단한 작은 부울 기능을하고있는 디렉토리 정보 변수를 시도 할 수로 전환 최근에이 주제에 대한 블로그 기사를 쓴 지정된 경로에서 디렉토리를 가져올 수 있습니다. 문제가 없으면 true를 반환하고, 예외가 처리되면 false를 반환하거나 예외 조항을 하위 예외로 분해하여 오류 코드를 가져옵니다. 희미한 새로운 FileIOPermission에 (FileIOPermissionAccess.Read, "C : \ 사용자 \ 관리자 \의 문서 \ 내 그림")으로 만약 readPermission : 은 위의 디렉토리 액세스 시도가 "액세스 거부"를 생산하지만, "보안 관리자
관련 문제
- 1. WPF - 구조적 예외 처리없이 리소스가 있는지 확인하십시오.
- 2. 사용자가 데이터베이스 생성 페이지에 액세스 할 수 있는지 확인 하시겠습니까?
- 3. 사용자가 SharePoint 2010의 콘텐츠 데이터베이스에 액세스 할 수 있는지 확인
- 4. 파일을 이동하거나 복사 할 수 있는지 확인
- 5. window.opener.parent.document에 대한 액세스 권한이 있는지 확인
- 6. .Net v2 만있는 컴퓨터에서 C# 프로그램을 실행할 수 있는지 확인
- 7. 테이블의 필드에 공백이 있는지 또는 쉼표가 있는지 확인 - MS 액세스
- 8. Oracle의 디렉토리에 대한 권한 확인
- 9. 확인 레지스트리 권한은 예외
- 10. 커서에 액세스 할 때의 예외
- 11. Eclipse 플러그인이 프로젝트 디렉토리에 어떻게 액세스 할 수 있습니까?
- 12. 내 파일을 만들기 전에 디렉토리에 쓰기 액세스 확인
- 13. 상위 디렉토리에 액세스
- 14. 앱에서 페이지를 관리 할 수 있는지 확인하십시오.
- 15. 어떤 결과가 있는지 확인 할 곳
- 16. 크로스 캐스트가 작동 할 수 있는지 여부를 확인 하시겠습니까?
- 17. 문자열이 정확하게되어 있는지 확인 내가 true를 반환 할 수
- 18. 윈도우가 도움말 모드에 있는지 확인
- 19. C# 예외 확인
- 20. VBA : 런타임에 라이브러리를 사용할 수 있는지 확인
- 21. 웹 서비스를 사용할 수 있는지 확인
- 22. int []의 값이 길 수 있는지 확인
- 23. WindowServer를 사용할 수 있는지 확인 하시겠습니까?
- 24. VB.Net에서 파일 또는 디렉토리에 액세스 할 수있는 AD 그룹 나열
- 25. 파이썬에서 VB .net API에 액세스 할 수 있습니까?
- 26. iOS - 런타임시 Accelerate.framework를 사용할 수 있는지 확인
- 27. AJAX에서 사용자 이름을 사용할 수 있는지 확인
- 28. .NET : URL이 이미지인지 확인
- 29. NSString에 단어가 있는지 확인
- 30. dll이 설치되어 있는지 확인
나는 다음과 같은 시도 .IsGranted (readPermission) "는 항상 true를 리턴합니다. – SharpAffair
http://msdn.microsoft.com/en-us/library/system.security.securitymanager.isgranted.aspx에서 : '사용 권한 부여는 정책에 의해 결정되며 재정의를 요구하는 요구와 다릅니다 (예 : 어설 션) . 또한 IsGranted는 스택의 다른 호출자와 관계없이 호출 코드 어셈블리의 부여 만 테스트합니다. ' – Oded
정답이 아닙니다. FileIOPermission은 파일 시스템이 아닌 CAS를 다룹니다. 즉, .NET 보안 정책이 액세스를 허용하는지 여부입니다. CAS에 액세스 할 수는 있지만 Windows는 여전히이를 거부 할 수 있습니다. DirectoryInfo.GetAccessControl()이 필요합니다. –