Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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#中的文件夹授予权限?_C#_.net_Security_Permissions_File Permissions - Fatal编程技术网

如何为c#中的文件夹授予权限?

如何为c#中的文件夹授予权限?,c#,.net,security,permissions,file-permissions,C#,.net,Security,Permissions,File Permissions,我需要使用c#为文件夹“临时ASP.NET文件”授予写入权限。。。我用这个密码给它访问权限 DirectoryInfo d1 = new DirectoryInfo(Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "Temporary ASP.NET Files")); DirectorySecurity md1 = d1.GetAccessControl(); string use

我需要使用c#为文件夹“临时ASP.NET文件”授予写入权限。。。我用这个密码给它访问权限

DirectoryInfo d1 = new DirectoryInfo(Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "Temporary ASP.NET Files"));
            DirectorySecurity md1 = d1.GetAccessControl();


            string user_1 = fa.TextGuestDomain + "\\" + fa.TextGuestUser;
            md1.AddAccessRule(new FileSystemAccessRule(user_1, FileSystemRights.FullControl,InheritanceFlags.ObjectInherit,PropagationFlags.InheritOnly, AccessControlType.Allow));

            d1.SetAccessControl(md1);
实现代码后,当我检查文件夹“临时ASP.NET文件”的安全属性时,它没有选中“写入”权限复选框,而是选中了“特殊权限”复选框。。。我注意到,即使我将访问权限从写更改为完全控制或读,它也会检查“特殊权限”一项

这不是问题:),问题是我没有给它提供正确的访问权限。。。当我给它写的时候,它不像我给它写的权限。我不知道为什么!!我做错了吗

注: 当我以手动方式进行操作时,它会工作,而使用编码方式时。它不起作用了

我希望你能帮我


非常感谢

我知道您的痛苦-文件系统ACL很难修改,即使它看起来有效,在某些情况下也可能会损坏。幸运的是,在您的情况下,有一个简单的解决方案

问题在于
传播标志.InheritOnly
。这意味着此权限仅应用于继承权限的项目-例如,您仅授予此目录中文件的权限,而不授予任何子目录中的文件的权限

要授予“正常”继承的目录权限(即传播到子目录和所有文件),请对InheritanceFlags和PropagationFlags使用以下值:
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit
PropagationFlags.None

  private static void GrantAccess(string file)
        {
            bool exists = System.IO.Directory.Exists(file);
            if (!exists)
            {
                DirectoryInfo di = System.IO.Directory.CreateDirectory(file);
                Console.WriteLine("The Folder is created Sucessfully");
            }
            else
            {
                Console.WriteLine("The Folder already exists");
            }
            DirectoryInfo dInfo = new DirectoryInfo(file);
            DirectorySecurity dSecurity = dInfo.GetAccessControl();
            dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
            dInfo.SetAccessControl(dSecurity);

        }

上面的代码将文件夹的访问权限设置为对每个用户(每个人)的完全控制/读写。

的工作原理与上面所说的完全相同。每个人都得到了完全的控制,但这对我不起作用。我想在
C:\Program Files\Unity\Hub\Editor\2019.4.20f1\Editor
中添加一些lib,并使用了相同的脚本,修改为不创建目录。我得到
错误:System.UnauthorizedAccessException:试图执行未经授权的操作。位于System.Security.AccessControl.NativeObjectSecurity.RaiseExceptionOnFailure(System.Int32错误代码、System.String名称、System.Runtime.InteropServices.SafeHandle句柄、System.Object上下文)[0x00024]