C# 检查目录权限时,Unity Mono平台不支持异常

C# 检查目录权限时,Unity Mono平台不支持异常,c#,mono,unity3d,C#,Mono,Unity3d,我正在使用下面的代码检查Windows中目录的权限 我在Unity 3.5.7f6中使用BuildSettings中的“PC&Mac”平台 我得到以下例外情况: PlatformNotSupportedException 未经授权的访问例外 string l_userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; DirectorySecurity folderSecurity; //Way 1: Gett

我正在使用下面的代码检查Windows中目录的权限

我在Unity 3.5.7f6中使用BuildSettings中的“PC&Mac”平台

我得到以下例外情况:

  • PlatformNotSupportedException
  • 未经授权的访问例外

    string l_userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
    
    DirectorySecurity folderSecurity;
    //Way 1: Getting **PlatformNotSupportedException** with below line.
    
    folderSecurity = new DirectorySecurity(a_directoryPath, AccessControlSections.Audit);
    
    //Way 1---ENDS HERE
    
    
    //Way 2: Getting **UnauthorizedAccessException** in last line of Way 2 block.
    
    DirectoryInfo l_directory = new DirectoryInfo(a_directoryPath);     
    folderSecurity = l_directory.GetAccessControl(AccessControlSections.Audit);
    
    //Way 2---ENDS HERE
    
    foreach (FileSystemAccessRule fileSystemAccessRule in folderSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
    {
    
        string l_domain_userName = fileSystemAccessRule.IdentityReference.Value;
        if (l_domain_userName.Equals(l_userName))
        {
            string l_userRights = fileSystemAccessRule.FileSystemRights.ToString();
            Debug.Log(l_domain_userName + ":" + l_userRights);
    
            if (fileSystemAccessRule.FileSystemRights.HasFlag(a_rightToCheck))
            {
                Debug.Log("-----have Accesss:" + a_rightToCheck);
                l_isGranted = true;
                break;
            }
        }
    }
    
  • 我已尝试打印操作系统版本:

    Environment.OSVersion.Platform
    
    它打印: WindowsNT 5.1.2600(即XP)

    我在上面所做的全部工作就是获取文件夹是否有权限(读或写)。


    请帮我解决这个问题。

    简短回答:目前Unity还没有实现这个功能

    Unity使用的是非常旧的Mono版本。移动平台和控制台似乎存在一些许可问题,因此他们无法简单地使用最新版本的Mono

    正如您在Unity 4.3中所看到的,
    DirectorySecurity
    的构造函数只会引发一个
    PlatformNotSupportedException
    。而且因为
    GetAccessControl
    依赖于
    DirectorySecurity
    ,所以它也只会


    如果您解释了为什么需要权限或您的最终目标是什么,我们可能会为您的问题找到另一种解决方案。

    看来,某些目录安全代码在Mono中没有以独立于平台的方式实现,即使在4.8中也是如此


    在Unix设备上运行Mono时,我在尝试编辑文件夹权限时遇到了类似的问题。这引发了一个问题,希望这能帮助类似船上的其他人…

    即使OP使用了较新版本的Unity,我认为Unity仍然使用了旧版本的monothx@knocte,我不知道Unity仍然使用如此旧版本的Mono。我已经更新了我的答案。@Leosori。我正在尝试获取文件夹是否具有权限(读或写)?@SatbirSingh,在您知道权限之后?你收集它们是为了好玩吗还是只想写入某些文件并检查您是否有写入权限?