Esta documentación está archivada y no tiene mantenimiento.

File.SetAccessControl (Método)

Actualización: noviembre 2007

Aplica al archivo especificado las entradas de la lista de control de acceso (ACL) descritas por un objeto FileSecurity.

Espacio de nombres:  System.IO
Ensamblado:  mscorlib (en mscorlib.dll)

public static void SetAccessControl(
	string path,
	FileSecurity fileSecurity
)
public static void SetAccessControl(
	String path,
	FileSecurity fileSecurity
)
public static function SetAccessControl(
	path : String, 
	fileSecurity : FileSecurity
)

Parámetros

path
Tipo: System.String
Archivo al que se van a agregar o del que se van a quitar entradas de la lista de control de acceso (ACL).
fileSecurity
Tipo: System.Security.AccessControl.FileSecurity
Objeto FileSecurity que describe una entrada de ACL que se aplica al archivo descrito por el parámetro path.

ExcepciónCondición
IOException

Se ha producido un error de E/S al abrir el archivo.

SEHException

El valor del parámetro path es null.

SystemException

No se encontró el archivo.

UnauthorizedAccessException

El parámetro path ha especificado un archivo que es de sólo lectura.

O bien

Esta operación no es compatible con la plataforma actual.

O bien

El parámetro path especifica un directorio.

O bien

El llamador no dispone del permiso requerido.

ArgumentNullException

El valor del parámetro fileSecurity es null.

El método SetAccessControl aplica las entradas de la lista de control de acceso (ACL) a un archivo que representa la lista ACL no heredada.

s0ay4e12.alert_caution(es-es,VS.90).gifPrecaución:

La lista ACL especificada para el parámetro fileSecurity reemplaza la lista ACL existente para el archivo. Si desea agregar permisos para un nuevo usuario, utilice el método GetAccessControl para obtener la lista ACL existente, modifíquela y, a continuación, utilice SetAccessControl para aplicarla otra vez al archivo.

Una lista ACL describe los individuos y/o grupos que tienen o no tienen derechos para realizar determinadas acciones en el archivo especificado. Para obtener más información, vea Información general sobre la tecnología ACL e Cómo: Agregar o quitar entradas de la lista de control de acceso.

El método SetAccessControl sólo conserva los objetos FileSecurity que se han modificado después de su creación. Si no se ha modificado un objeto FileSecurity, no se conservará en un archivo. Por tanto, no es posible recuperar un objeto FileSecurity de un archivo y volver a aplicar el mismo objeto a otro archivo.

Para copiar la información de una lista ACL de un archivo a otro:

  1. Utilice el método GetAccessControl para recuperar el objeto FileSecurity del archivo de código fuente.

  2. Cree un nuevo objeto FileSecurity para el archivo de destino.

  3. Utilice el método GetSecurityDescriptorBinaryForm o GetSecurityDescriptorSddlForm del objeto FileSecurity de origen para recuperar la información de la ACL.

  4. Utilice el método SetSecurityDescriptorBinaryForm o SetSecurityDescriptorSddlForm para copiar la información recuperada en el paso 3 en el objeto FileSecurity de destino.

  5. Establezca el objeto FileSecurity de destino en el archivo de destino utilizando el método SetAccessControl.

En entornos de NTFS, se concede ReadAttributes y ReadExtendedAttributes al usuario si éste tiene derechos de ListDirectory en la carpeta primaria. Para denegar ReadAttributes y ReadExtendedAttributes, deniegue ListDirectory en el directorio primario.

En el ejemplo de código siguiente se utilizan los métodos GetAccessControl y SetAccessControl para agregar y después quitar una entrada de la lista de control de acceso (ACL) de un archivo. Es preciso especificar una cuenta de grupo o de usuario válida para poder ejecutar este ejemplo.

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

namespace FileSystemExample
{
    class FileExample
    {
        public static void Main()
        {
            try
            {
                string fileName = "test.xml";

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

                // Add the access control entry to the file.
                AddFileSecurity(fileName, @"DomainName\AccountName",
                    FileSystemRights.ReadData, AccessControlType.Allow);

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

                // Remove the access control entry from the file.
                RemoveFileSecurity(fileName, @"DomainName\AccountName",
                    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)
        {


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

            // Add the FileSystemAccessRule to the security settings.
            fSecurity.AddAccessRule(new FileSystemAccessRule(account,
                rights, controlType));

            // Set the new access settings.
            File.SetAccessControl(fileName, 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)
        {

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

            // Remove the FileSystemAccessRule from the security settings.
            fSecurity.RemoveAccessRule(new FileSystemAccessRule(account,
                rights, controlType));

            // Set the new access settings.
            File.SetAccessControl(fileName, fSecurity);

        }
    }
}


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0
Mostrar: