如何检查TreeView中是否锁定了目录

本文关键字:锁定 是否 TreeView 何检查 检查 | 更新日期: 2023-09-27 18:29:49

我有一个TreeView,它映射并填充目录中的所有文件夹,我传入变量virtualPath

是否有任何函数或属性可以告诉我目录是否被阻止?这样我就可以向用户显示一条消息,说他没有访问该目录的权限。

String[] directories= Listdirectories(virtualPath.ToString());
foreach (string directory in directories) {
    node = new RadTreeNode(Path.GetDirectoryName(directory .ToString()));
    node.Value = virtualPath + "''" + Path.GetFileName(directory .ToString());
    parentNode.Nodes.Add(node);
}

如何检查TreeView中是否锁定了目录

Directory.GetAcessControl(路径)满足您的要求。

public static bool HasWritePermissionOnDir(string path)
{
    var writeAllow = false;
    var writeDeny = false;
    var accessControlList = Directory.GetAccessControl(path);
    if(accessControlList == null)
        return false;
    var accessRules = accessControlList.GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier));
    if(accessRules ==null)
       return false;
    foreach (FileSystemAccessRule rule in accessRules)
    {
        if ((FileSystemRights.Write & rule.FileSystemRights) != FileSystemRights.Write) continue;
        if (rule.AccessControlType == AccessControlType.Allow)
            writeAllow = true;
        else if (rule.AccessControlType == AccessControlType.Deny)
            writeDeny = true;
    }
    return writeAllow && !writeDeny;
}

(FileSystemRights.Write&rights)==FileSystemRights。Write使用的是一种名为"Flags"的东西,如果你不知道它是什么,你应该真正阅读:)

在填充Treeview时,用以下内容标记所需的节点:节点。标签="LOCK"

然后使用

    private void trv_SourceFolder_BeforeExpand(object sender, TreeViewCancelEventArgs e)
    {
        if (Convert.ToString(e.Node.Tag) == "LOCK")
            e.Cancel = true;
    }