.net 正在检查文件/文件夹访问权限

ckx4rj1h  于 2022-12-24  发布在  .NET
关注(0)|答案(3)|浏览(168)

我得到一个运行以下代码的UnautorizedAccessException

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

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

mrwjdhj3

mrwjdhj31#

首先,我会手动检查权限,看看什么阻止了你,什么没有。我用这样的东西来检查权限(复制文件):

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 
}

此外,还有一些奇怪的情况下,文件夹上的某个权限会更改文件的权限,而不管它们各自的权限(将看看我是否能找到它是什么)。

wljmcqd8

wljmcqd82#

检查代码项目上的文章,这是关于你需要的东西,是为此创建的类:此类的目的是为常见问题“我是否具有读或写此文件的权限?"提供简单答案。
A simple way to test individual access rights for a given file and user
注意:不能张贴整个代码在这里,因为它太长.

42fyovps

42fyovps3#

首先,调用Directory.GetFiles获取根目录。捕获UnauthorizedAccessException-如果没有,则您具有完全访问权限。
如果捕获-递归调用每个子目录的函数,捕获异常,如果捕获-将这样的目录添加到列表中。
编写一个递归函数,并带有禁用目录的外部列表

相关问题