System.IO.FileInfo.SetAccessControl 方法

方法描述

将 FileSecurity 对象所描述的访问控制列表 (ACL) 项应用于当前 FileInfo 对象所描述的文件。

语法定义(C# System.IO.FileInfo.SetAccessControl 方法 的用法)

public void SetAccessControl(
	FileSecurity fileSecurity
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
fileSecurity System-Security-AccessControl-FileSecurity 一个 FileSecurity 对象,该对象描述要应用于当前文件的访问控制列表 (ACL) 项。
返回值 void

提示和注释

SetAccessControl 方法将访问控制列表 (ACL) 项应用于表示非继承 ACL 列表的当前文件。

每当需要对某个文件添加或移除 ACL 项时,请使用 SetAccessControl 方法。

警告

为 fileSecurity 参数指定的 ACL 替换该文件的现有 ACL。 若要为新用户添加权限,请使用 GetAccessControl 方法获取现有的 ACL 并对其进行修改,然后使用 SetAccessControl 将其重新应用于此文件。

ACL 描述对给定文件具有或没有执行特定操作的权限的个人和(或)组。 有关更多信息,请参见ACL 技术概述和如何:添加或移除访问控制列表项。

SetAccessControl 方法仅保持创建对象之后进行了修改的 FileSecurity 对象。如果 FileSecurity 对象尚未进行修改,它将不会保持在文件中。因此,无法从文件检索一个 FileSecurity 对象并将相同的对象重新应用于其他文件。

将 ACL 信息从一个文件复制到另一个文件:

使用 GetAccessControl 方法从源文件检索 FileSecurity 对象。

为目标文件创建一个新的 FileSecurity 对象。

使用源 FileSecurity 对象的 GetSecurityDescriptorBinaryForm 或 GetSecurityDescriptorSddlForm 方法检索 ACL 信息。

使用 SetSecurityDescriptorBinaryForm 或 SetSecurityDescriptorSddlForm 方法将在步骤 3 中检索到的信息复制到目标 FileSecurity 对象。

使用 SetAccessControl 方法将 FileSecurity 目标对象设置为目标文件。

System.IO.FileInfo.SetAccessControl 方法例子

您必须提供有效的用户或组帐户才能运行此示例。

using System;
using System.IO;
using System.Security.AccessControl;

namespace FileSystemExample
{
    class FileExample
    {
        public static void Main()
        {
            try
            {
                string FileName = "c:/test.xml";

                Console.WriteLine("Adding access control entry for " + FileName);

                // Add the access control entry to the file.
                // Before compiling this snippet, change MyDomain to your 
                // domain name and MyAccessAccount to the name 
                // you use to access your domain.
                AddFileSecurity(FileName, @"MyDomain\MyAccessAccount", FileSystemRights.ReadData, AccessControlType.Allow);

                Console.WriteLine("Removing access control entry from " + FileName);

                // Remove the access control entry from the file.
                // Before compiling this snippet, change MyDomain to your 
                // domain name and MyAccessAccount to the name 
                // you use to access your domain.
                RemoveFileSecurity(FileName, @"MyDomain\MyAccessAccount", FileSystemRights.ReadData, AccessControlType.Allow);

                Console.WriteLine("Done.");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

        }

        // Adds an ACL entry on the specified file for the specified account.
        public static void AddFileSecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
        {
            // Create a new FileInfo object.
            FileInfo fInfo = new FileInfo(FileName);

            // Get a FileSecurity object that represents the 
            // current security settings.
            FileSecurity fSecurity = fInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings. 
            fSecurity.AddAccessRule(new FileSystemAccessRule(Account,
                                                            Rights,
                                                            ControlType));

            // Set the new access settings.
            fInfo.SetAccessControl(fSecurity);

        }

        // Removes an ACL entry on the specified file for the specified account.
        public static void RemoveFileSecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
        {
            // Create a new FileInfo object.
            FileInfo fInfo = new FileInfo(FileName);

            // Get a FileSecurity object that represents the 
            // current security settings.
            FileSecurity fSecurity = fInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings. 
            fSecurity.RemoveAccessRule(new FileSystemAccessRule(Account,
                                                            Rights,
                                                            ControlType));

            // Set the new access settings.
            fInfo.SetAccessControl(fSecurity);

        }
    }
}
//This code produces output similar to the following; 
//results may vary based on the computer/file structure/etc.:
//
//Adding access control entry for c:\test.xml
//Removing access control entry from c:\test.xml
//Done.
//

异常

异常 异常描述
ArgumentNullException fileSecurity 参数为 null。
SystemException 未能找到或修改文件。
UnauthorizedAccessException 当前进程不具有打开该文件的权限。
PlatformNotSupportedException 当前操作系统不是 Microsoft Windows 2000 或更高版本。

命名空间

namespace: System.IO

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。