检查文件/文件夹访问权限

时间:2010-08-11 07:57:41

标签: c# .net vb.net file-permissions

我得到UnautorizedAccessException运行此代码:

string[] fileList = Directory.GetFiles(strDir, strExt);

c:\users\username\appdata发生异常 如何检查我是否具有访问权限(列出和读取文件)?

3 个答案:

答案 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 - 如果没有,则您具有完全访问权限。

如果捕获 - 以递归方式调用每个子目录的函数,捕获异常,如果捕获 - 将这样的目录添加到列表中。

用禁止目录的外部列表编写递归函数