Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取文件';当前用户.net的权限_C#_.net_File_Permissions_Directory Security - Fatal编程技术网

C# 获取文件';当前用户.net的权限

C# 获取文件';当前用户.net的权限,c#,.net,file,permissions,directory-security,C#,.net,File,Permissions,Directory Security,我正在扫描文件夹中的文件,我需要以任何方式获取当前用户对每个文件的权限,并将其表示为字符串。 因此,对于附加文件的属性,我想表示如下内容 绳子 我试图像这样在扫描循环中完成这一点,但得到的是空字符串。你能暗示一下我应该从这里走到哪里,或者选择另一种方法吗?提前谢谢 string permissionShort = string.Empty; DirectorySecurity dSecurity = Directory.GetAccessContr

我正在扫描文件夹中的文件,我需要以任何方式获取当前用户对每个文件的权限,并将其表示为字符串。 因此,对于附加文件的属性,我想表示如下内容 绳子

我试图像这样在扫描循环中完成这一点,但得到的是空字符串。你能暗示一下我应该从这里走到哪里,或者选择另一种方法吗?提前谢谢

            string permissionShort = string.Empty;
            DirectorySecurity dSecurity = Directory.GetAccessControl(_directory.FullName);
            foreach (FileSystemAccessRule rule in dSecurity.GetAccessRules(true, true, typeof(NTAccount)))
            {
                if (rule.FileSystemRights == FileSystemRights.Write)
                    permissionShort = permissionShort + "x";
                if (rule.FileSystemRights == FileSystemRights.Read)
                    permissionShort = permissionShort + "x";
                if (rule.FileSystemRights == FileSystemRights.AppendData)
                    permissionShort = permissionShort + "x";
                if (rule.FileSystemRights == FileSystemRights.Modify)
                    permissionShort = permissionShort + "x";
                if (rule.FileSystemRights == FileSystemRights.ExecuteFile)
                    permissionShort = permissionShort + "x";
            }

FileSystemRights是一个标记的枚举,这意味着您必须执行AND操作来测试枚举的单个值

    string scanPath = @"C:\Test";
    string permissionShort = string.Empty;
    DirectorySecurity dSecurity = Directory.GetAccessControl(scanPath);
    foreach (FileSystemAccessRule rule in dSecurity.GetAccessRules(true, true, typeof(NTAccount)))
    {
        permissionShort += rule.FileSystemRights.ToString() + " : ";
        permissionShort += ((rule.FileSystemRights & FileSystemRights.FullControl) == FileSystemRights.FullControl) ? "f" : "-";
        permissionShort += ((rule.FileSystemRights & FileSystemRights.Write)== FileSystemRights.Write) ? "w" : "-";
        permissionShort += ((rule.FileSystemRights & FileSystemRights.Read) == FileSystemRights.Read) ? "r" : "-";
        permissionShort += ((rule.FileSystemRights & FileSystemRights.AppendData) == FileSystemRights.AppendData) ? "a" : "-";
        permissionShort += ((rule.FileSystemRights & FileSystemRights.Modify) == FileSystemRights.Modify) ? "m" : "-";
        permissionShort += ((rule.FileSystemRights & FileSystemRights.ExecuteFile) == FileSystemRights.ExecuteFile) ? "e" : "-";
        permissionShort += "\n";
    }

可能应该是重复的,但需要一些调整的问题。。。因此,请发表评论,而不是VTC。谢谢。它可以工作,但给出了3次结果,我怀疑它统计了系统上的所有帐户。