我得到UnautorizedAccessException
运行此代码:
string[] fileList = Directory.GetFiles(strDir, strExt);
c:\users\username\appdata
发生异常
如何检查我是否具有访问权限(列出和读取文件)?
答案 0 :(得分:9)
首先,我会手动检查权限,看看是什么阻止了你,什么不阻止。我正在使用这样的东西来检查权限(对于复制文件):
AuthorizationRuleCollection acl = fileSecurity.GetAccessRules(true, true,typeof(System.Security.Principal.SecurityIdentifier));
bool denyEdit = false;
for (int x = 0; x < acl.Count; x++)
{
FileSystemAccessRule currentRule = (FileSystemAccessRule)acl[x];
AccessControlType accessType = currentRule.AccessControlType;
//Copy file cannot be executed for "List Folder/Read Data" and "Read extended attributes" denied permission
if (accessType == AccessControlType.Deny && (currentRule.FileSystemRights & FileSystemRights.ListDirectory) == FileSystemRights.ListDirectory)
{
//we have deny copy - we can't copy the file
denyEdit = true;
break;
}
... more checks
}
此外,在某些奇怪的情况下,文件夹上的某个权限会更改文件的权限,无论其个人权限如何(将查看是否可以找到它)。
答案 1 :(得分:4)
检查关于代码项目的文章,这是关于你需要的东西,是为此创建的类:这个类的目的是提供一个常见问题的简单答案,“我是否有权读取或写入此文件?”。
A simple way to test individual access rights for a given file and user
注意:不能在此处发布整个代码,因为它太长了。
答案 2 :(得分:3)
首先,为根目录调用Directory.GetFiles
。 Catch UnauthorizedAccessException
- 如果没有,则您具有完全访问权限。
如果捕获 - 以递归方式调用每个子目录的函数,捕获异常,如果捕获 - 将这样的目录添加到列表中。
用禁止目录的外部列表编写递归函数