2010-02-25 3 views

답변

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를 사용해야합니다.

+0

나는 다음과 같은 시도 .IsGranted (readPermission) "는 항상 true를 리턴합니다. – SharpAffair

+0

http://msdn.microsoft.com/en-us/library/system.security.securitymanager.isgranted.aspx에서 : '사용 권한 부여는 정책에 의해 결정되며 재정의를 요구하는 요구와 다릅니다 (예 : 어설 션) . 또한 IsGranted는 스택의 다른 호출자와 관계없이 호출 코드 어셈블리의 부여 만 테스트합니다. ' – Oded

+6

정답이 아닙니다. FileIOPermission은 파일 시스템이 아닌 CAS를 다룹니다. 즉, .NET 보안 정책이 액세스를 허용하는지 여부입니다. CAS에 액세스 할 수는 있지만 Windows는 여전히이를 거부 할 수 있습니다. DirectoryInfo.GetAccessControl()이 필요합니다. –

9

간단히 입력 할 수 없습니다. 디렉토리에 액세스 할 수 있는지 확인하는 방법은 없습니다. 액세스 할 수 있다고 판단 할 수있는 것이 전부입니다. 수표가 완료되는 즉시 이유가 변경되어 사용 권한이 변경되고 수표가 무효화됩니다. 구현할 수있는 가장 신뢰할 수있는 전략은 디렉토리에 액세스하여 UnauthorizedAccessException을 잡는 것입니다.

는 여기 세부 조금

-1

을 그냥 간단한 작은 부울 기능을하고있는 디렉토리 정보 변수를 시도 할 수로 전환 최근에이 주제에 대한 블로그 기사를 쓴 지정된 경로에서 디렉토리를 가져올 수 있습니다. 문제가 없으면 true를 반환하고, 예외가 처리되면 false를 반환하거나 예외 조항을 하위 예외로 분해하여 오류 코드를 가져옵니다. 희미한 새로운 FileIOPermission에 (FileIOPermissionAccess.Read, "C : \ 사용자 \ 관리자 \의 문서 \ 내 그림")으로 만약 readPermission : 은 위의 디렉토리 액세스 시도가 "액세스 거부"를 생산하지만, "보안 관리자

관련 문제