Atributos de un fichero

Descripción general

Atributos de un fichero: Son determinadas características que se asocian y determinan el tipo de fichero y directorio. Están estrictamente definidos por el sistema de archivos de cada sistema operativo. En este documento se muestra como modificarlos.

[TOC] Tabla de Contenidos


↑↑↑

Atributos de un fichero


↑↑↑

Definición de archivo o fichero

Un archivo informático o fichero es un conjunto de bits almacenado en un dispositivo periférico (disco duro, USB, etc.). Un archivo se identifica con un nombre (en Windows nombre más extensión, en GNU Linux sólo nombre) y la descripción de la unidad y carpeta o directorio que lo contiene. Los archivos informáticos se llaman así porque son los equivalentes digitales de los archivos en papel del entorno de oficina tradicional [Extraído de wikipedia - Archivo (informática) - ]


↑↑↑

Atributos de un fichero

Son determinadas características que se asocian y determinan el tipo de fichero y directorio. Están estrictamente definidos por el sistema de archivos de cada sistema operativo


↑↑↑

Atributos en Windows

Los posibles atributos son:


↑↑↑

ReadOnly:


↑↑↑

Hidden:


↑↑↑

System:


↑↑↑

Directory


↑↑↑

Archive:


↑↑↑

Device:


↑↑↑

Normal


↑↑↑

Temporary:


↑↑↑

SparseFile:


↑↑↑

ReparsePoint:


↑↑↑

Compressed:


↑↑↑

Offline:


↑↑↑

NotContentIndexed:


↑↑↑

Encrypted:


↑↑↑

Modificar los atributos


↑↑↑

Usando la orden attrib de microsoft windows

Como cosa curiosa, el día 27 de Julio de 2011 el sistema operativo MS DOS, que figura de forma subyacente en todos los sistemas Windows cumple 30 años desde que Microsoft lo comprara a Seattle Computer Products en 1981, aunque la versión 1.0 se lanzara en 1982.

La orden attrib: Permite ver y modificar las propiedades de un archivo.


↑↑↑

Sintaxis

Copiada directamente de la consola :-)

ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [+I | -I]
       [unidad:][ruta][nombreDeArchivo] [/S [/D] [/L]]

  +   Establece un atributo.
  -   Borra un atributo.
  R   Atributo de sólo lectura del archivo.
  A   Atributo de archivo de almacenamiento.
  S   Atributo de archivos del sistema.
  H   Atributo de archivo oculto.
  I   No atributo de archivo indizado de contenido.
  [unidad:][ruta][nombreDeArchivo]
      Especifica el archivo o archivos que serán afectados por ATTRIB
  /S  Procesa archivos que coinciden en la carpeta y todas las subcarpetas actuales.
  /D  También procesa carpetas.
  /L  Se trabaja en los atributos del vínculo simbólico en vez de  en el destino del vínculo simbólico

Hay varias maneras de usarlo:


↑↑↑

Desde la interfaz gráfica de Windows 7

  1. Abriremos el Explorador de Windows, accederemos a la unidad y carpeta donde tengamos el fichero, ficheros o carpetas y sus ficheros a los que les queramos cambiar los atributos, los seleccionaremos y pulsaremos con el botón derecho del ratón. En el menú emergente pulsaremos en "Propiedades":
  2. En la pestaña "General" de las propiedades de los archivos o carpetas seleccionados podremos ver, en "Atributos" el estado de los atributos de Sólo lectura y Oculto. Marcando o desmarcando el check de estos atributos los activaremos o desactivaremos
  3. Si hemos seleccionado una carpeta y modificamos sus atributos al pulsar "Aceptar" en la ventana anterior nos mostrará otra ventana con las opciones:
    • Aplicar cambios sólo a esta carpeta: modificará los atributos de la carpeta seleccionada y los archivos que contenga. Pero no modificará los atributos a las subcarpetas.
    • Aplicar cambios a esta carpeta y a todas las subcarpetas y archivos: modificará los atributos a los archivos y subcarpetas de la carpeta seleccionada.
  4. Desde la ventana anterior de Atributos avanzados podremos activar o desactivar los atributos de:
    • Archivo listo para archivarse.
    • Permitir que este archivo tenga el contenido indizado además de las propiedades de archivo.
    • Comprimir contenido para ahorrar espacio en disco.
    • Cifrar contenido para proteger datos.

↑↑↑

Desde código .NET

Desde .NET existe la posibilidad de modificar los atributos de un fichero

Los nombres y valores posibles de los atributos están en una enumeración llamada FileAttributes Enumeration Para usarlos, las clases FileInfo y DirectoryInfo que heredan de la case FileSystemInfo disponen de la propiedad Attributes que Obtiene o establece los atributos del archivo o directorio actual. (Se hereda de FileSystemInfo).

Con este conocimiento podemos realizar una función que compruebe si existe o no un determinado atributo en un objeto FileSystemInfo, de esta forma la misma función vale para tratar archivos y/o para tratas directorios


↑↑↑

Saber si un atributo esta marcado o no

''' <summary>
'''  Comprobar si existe (o no) un atributo determinado 
'''  en un objeto [IO.FileSystemInfo]. 
'''  Por ejemplo ¿Existe el atributo [Hidden]?
''' </summary>
''' <param name="fsi">
'''   <para>Tipo <see cref="system.IO.FileSystemInfo">IO.FileSystemInfo</see></para>
'''   <para>El objeto que contiene el directorio o el archivo</para>
''' </param>
''' <param name="atributoAComprobar">
'''   <para> Tipo: <see cref="System.IO.FileAttributes">System.IO.FileAttributes</see></para>
'''   <para> FileAttributes del FileSystemInfo actual.</para>
'''   <para> Atributo que se mira a ver si existe 
'''          en los atributos del FileSystemInfo actual.</para>
''' </param>
''' <returns>
'''   <para>Tipo <see cref="System.Boolean">Boolean</see></para>
'''   <para>Un valor lógico que indica </para>
'''     <para>[True]  En el objeto [FileSystemInfo] Existe el atributo consultado </para>
'''     <para>[False] El atributo no existe </para>
''' </returns>
''' <remarks>
'''     <para>Para actualizar el valor de los parámetros se llama al método Refresh.</para>
''' </remarks>
Public Overloads Shared Function IsMarcado( _
    ByVal fsi As System.IO.FileSystemInfo, _
    ByVal atributoAComprobar As System.IO.FileAttributes) As Boolean

    '--------------------------------------
    ' Control de parámetros
    '------------------------------------
    If fsi Is Nothing Then
        Throw New ArgumentNullException( _
        "fsi", "El objeto [IO.FileSystemInfo] tiene un valor [Nothing]")
    End If

    '-----------------------------------
    ' Proceso
    '-----------------------------------
    fsi.Refresh()
    Return ((fsi.Attributes And atributoAComprobar) = atributoAComprobar)
    'Dim Existe As Boolean = ((fsi.Attributes And atributoAComprobar) = atributoAComprobar)
    'Return Existe
End Function

No obstante, cuando comprobemos los valores que se devuelven veremos una serie de comportamientos "extraños". Por ejemplo, si el fichero no existe físicamente en el disco, podremos comprobar que TODOS los atributos del fichero están marcados

Tampoco podremos cambiar los atributos de un fichero que no existe físicamente en el disco, porque se dispara una "excepction" del tipo FileNotFoundException o DirectoryNotFoundException según sea el caso


↑↑↑

Marcar atributos

Para Marcar un atributo, por ejemplo queremos que un fichero tenga el atributo [ReadOnly] usaremos la función siguiente

''' <summary>
'''  Añadir un atributo de un objeto [IO.FileSystemInfo]. 
'''  Por ejemplo el atributo [Hidden]
''' </summary>
''' <param name="fsi">
'''   <para>tipo <see cref="System.IO.FileSystemInfo">IO.FileSystemInfo</see></para>
'''   <para>El objeto que contiene el directorio o el archivo</para>
''' </param>
''' <param name="atributoAñadir">
'''   <para> Tipo: <see cref="System.IO.FileAttributes">System.IO.FileAttributes</see></para>
'''   <para> FileAttributes del FileSystemInfo actual.</para>
'''   <para> Atributo que se va a añadir a los atributos del FileSystemInfo actual.</para>
''' </param>
''' <returns>
'''   <para>Tipo <see cref="System.Boolean">Boolean</see></para>
'''   <para>Un valor lógico que indica </para>
'''     <para>[True]  La operación se ha realizado correctamente 
'''           Si la función devuelve el valor true, significa que el 
'''           objeto [FileSystemInfo] tiene marcado el atributo deseado, 
'''           (Por ejemplo [Hidden]) , independientemente de si lo tenía 
'''           previamente o ha sido esta función la que ha realizado el cambio
'''     </para>
'''     <para>[False] La operación ha fallado </para>
''' </returns>
''' <remarks>
'''     <para>Para actualizar el valor de los parámetros se llama al método Refresh.</para>
'''     <para>¡¡¡ OJITO !!! 
'''           Si el objeto FSI, no existe físicamente en el disco, 
'''           entonces tiene TODOS sus atributos marcados
'''     </para>
''' </remarks>
Public Overloads Shared Function Marcar( _
    ByVal fsi As System.IO.FileSystemInfo, _
    ByVal atributoAñadir As System.IO.FileAttributes) As Boolean

    '----------------------------------------------
    'Apunte Táctico
    '¡¡¡ OJITO !!! Si el objeto FSI, no existe físicamente en el disco, 
    '              entonces tiene TODOS sus atributos marcados
    '  Y ADEMAS    no permite modificarlos, y si se intenta se dispara 
    '              una excepción del tipo [FileNotFoundException]
    '----------------------------------------------


    '--------------------------------------
    ' Control de parámetros
    'If fsi Is Nothing Then
    '    ' se comprueba en la función [IsMarcado]
    '------------------------------------
    Dim atributoMarcado As Boolean
    Select Case IsMarcado(fsi, atributoAñadir)
        Case True
            ' el atributo ya está marcado, devolver true 
            ' la operación de marcar ha tenido éxito
            atributoMarcado = True

        Case False
            ' el atributo NO esta marcado --> marcarlo
            Try
                fsi.Attributes = fsi.Attributes Or atributoAñadir
                ' hay veces que el atributo no se marca de ninguna forma
                ' tampoco genera error
                ' miro a ver si se ha marcado y devuelvo el valor correspondiente

                ' si esta marcado (true) entonces ha funcionado
                atributoMarcado = IsMarcado(fsi, atributoAñadir)
            Catch ex As Exception
                ' hay grupos de atributos que no pueden ir juntos
                ' por ejemplo , directory y temporal
                ' directoy y normal
                atributoMarcado = False
            End Try
    End Select
    Return atributoMarcado

End Function

↑↑↑

Desmarcar atributos

Para quitar un atributo, por ejemplo ya no nos interesa que un archivo tenga el atributo [ReadOnly] porque queremos modificarlo, usaremos la siguiente función:

''' <summary>
'''  Borrar un atributo de un objeto [IO.FileSystemInfo]. 
'''  Por ejemplo quitar el atributo [Hidden]
''' </summary>
''' <param name="fsi">
'''   <para>tipo <see cref="System.IO.FileSystemInfo">IO.FileSystemInfo</see></para>
'''   <para>El objeto que contien el directorio o el archivo</para>
''' </param>
''' <param name="atributoABorrar">
'''   <para> Tipo: <see cref="System.IO.FileAttributes">System.IO.FileAttributes</see></para>
'''   <para> FileAttributes del FileSystemInfo actual.</para>
'''   <para> Atributo que se va a borrar de los atributos del FileSystemInfo actual.</para>
''' </param>
''' <returns>
'''   <para>Tipo <see cref="System.Boolean">Boolean</see></para>
'''   <para>Un valor logico que indica </para>
'''     <para>[True]  La operacion se ha realizado correctamente 
'''           Si la función devuelve el valor true, significa que el 
'''           objeto [FileSystemInfo] tiene desmarcado el atributo deseado, 
'''           (Por ejemplo [Hidden]), independientemente de si ya estaba desmarcado
'''           previamente o ha sido esta función la que ha realizado el cambio
''' </para>
'''     <para>[False] La operacion ha fallado </para>
''' </returns>
''' <remarks>
'''    <para>Para poder cambiar un atributo de un objeto [FileSystemInfo], el fichero 
'''          o carpeta que representa, tiene que existir físicamente en el disco. 
'''    </para>
'''    <para>Si el fichero no existe, el sistema dispara un error 
'''          [FileNotFoundException] al intentar cambiar un atributo.
'''    </para>
'''    <para>Si el fichero existe físicamente en el disco, hay atributos que no se 
'''          pueden cambiar, aunque al intentarlo el sistema no dispara ningún error
'''    </para>
'''    <para>Esta función intercepta los errores pero no dispara ninguno, 
'''          simplemente devuelve el valor [False] para indicar que el 
'''          proceso de desmarcado ha fallado.
'''    </para>
'''    <para>Es decir, si queremos saber si la operación de desmarcado del atributo 
'''          ha tenido éxito o no hay que mirar el valor lógico de retorno
'''    </para>
''' </remarks>
Public Overloads Shared Function Desmarcar( _
    ByVal fsi As System.IO.FileSystemInfo, _
    ByVal atributoABorrar As System.IO.FileAttributes) As Boolean

    '--------------------------------------
    ' Control de parámetros
    'If fsi Is Nothing Then
    '    ' se comprueba en la función [IsMarcado]
    '------------------------------------

    ' Soy optimista, supongo que esta quitado
    Dim atributoQuitado As Boolean = True 
    fsi.Refresh()
    '------------------------------------
    ' BUG
    ' Error FileNotFoundException
    ' ocurre cuando el fichero no existe físicamente en el disco
    ' es decir, si el fichero no existe en el disco no puedo modificar sus atributos
    ' en realidad están todos los atributos marcados
    ' y el valor fsi.Attributes = -1
    '----------------------------------

    Select Case IsMarcado(fsi, atributoABorrar)
        Case True
            ' el atributo esta marcado --> Quitarlo
            ' BUG-->  Error FileNotFoundException
            If fsi.Exists = True Then
                fsi.Attributes = fsi.Attributes Xor atributoABorrar
                'hay veces que el atributo no se quita de ninguna forma
                'tampoco genera error
                'miro a ver si se ha quitado y devuelvo el valor correspondiente
                ' si esta marcado [True] entonces no he podido quitar el valor,
                ' la operación de quitado no ha funcionado y ESTA función tiene
                ' que devolver el valor [False], porque existía el atributo
                ' marcado y ahora sigue existiendo, luego la operación ha fallado

                atributoQuitado = Not (IsMarcado(fsi, atributoABorrar))
            Else
                ' el  fichero no existe en el disco
                ' no se pueden modificar los atributos
                ' el atributo esta marcado 
                ' como ves ni siquiera intento desmarcarlo
                atributoQuitado = False
            End If

        Case False
            ' el atributo ya esta quitado, devolver true 
            ' la operacion de desmarcar ha tenido exito :-)
            atributoQuitado = True
    End Select

    Return atributoQuitado

End Function

↑↑↑

Observaciones


↑↑↑

Resultado al intentar marcar todos los atributos

Comportamiento de un objeto [File] y de un objeto [Directory] al intentar marcar TODOS sus atributos con las funciones anteriores.

El directorio y el fichero existen físicamente en el disco

        '--------------------------------------------------
        ' Nota - la diferencia está en la marca [Directory] y [Temporary]
       '--------------------------------------------------
        '(2)(marcados Todos)--- DIRECTORIO--
        'Fichero: E:\Borrar\Nueva carpeta
        'Listado de sus atributos:
        '[X] - ReadOnly           
        '[X] - Hidden             
        '[X] - System             
        '[X] - Directory          
        '[X] - Archive            
        '[ ] - Device             
        '[ ] - Normal             
        '[ ] - Temporary          
        '[ ] - SparseFile         
        '[ ] - ReparsePoint       
        '[ ] - Compressed         
        '[X] - Offline            
        '[X] - NotContentIndexed  
        '[ ] - Encrypted                 '   
        '--------------------------------------------------
        '(2)(marcados Todos)-- FICHERO--
        'Fichero: E:\Borrar\borrar.soap11
        'Listado de sus atributos:
        '[X] - ReadOnly           
        '[X] - Hidden             
        '[X] - System             
        '[ ] - Directory          
        '[X] - Archive            
        '[ ] - Device             
        '[ ] - Normal             
        '[X] - Temporary          
        '[ ] - SparseFile         
        '[ ] - ReparsePoint       
        '[ ] - Compressed         
        '[X] - Offline            
        '[X] - NotContentIndexed  
        '[ ] - Encrypted          
        '--------------------------------------------

↑↑↑

Resultado al desmarcar todos los atributos y marcar únicamente con el atributo [Normal]

 
        '--------------------------------------------------
        ' Comportamiento de los atributos al borrar todos y 
        ' marcar solamente el atributo normal
        ' la carpeta y el fichero existen fisicamente en el disco
        '--------------------------------------------------
        '(1)(Quitar Todos y Marca Normal)- DIRECTORIO--
        'Fichero: E:\Borrar\Nueva carpeta
        'Listado de sus atributos:
        ' [ ] - ReadOnly           
        ' [ ] - Hidden             
        ' [ ] - System             
        ' [X] - Directory          
        ' [ ] - Archive            
        ' [ ] - Device             
        ' [ ] - Normal             
        ' [ ] - Temporary          
        ' [ ] - SparseFile         
        ' [ ] - ReparsePoint       
        ' [ ] - Compressed         
        ' [ ] - Offline            
        ' [ ] - NotContentIndexed  
        ' [ ] - Encrypted          

        '--------------------------------------------------
        '(1)(Quitar Todos y Marca Normal)- FICHERO--
        'Fichero: E:\Borrar\borrar.soap11
        'Listado de sus atributos:
        ' [ ] - ReadOnly           
        ' [ ] - Hidden             
        ' [ ] - System             
        ' [ ] - Directory          
        ' [ ] - Archive            
        ' [ ] - Device             
        ' [X] - Normal             
        ' [ ] - Temporary          
        ' [ ] - SparseFile         
        ' [ ] - ReparsePoint       
        ' [ ] - Compressed         
        ' [ ] - Offline            
        ' [ ] - NotContentIndexed  
        ' [ ] - Encrypted     
        '
 

↑↑↑

Atributos de un fichero que NO existe en el disco

        '----------------------------------------------
        'Apunte Táctico
        '¡¡¡ OJITO !!! Si el objeto FSI, no existe físicamente en el disco, 
        '              entonces tiene TODOS sus atributos marcados
        '  Y ADEMAS    no permite modificarlos, y si se intenta se dispara 
        '              una excepción del tipo [FileNotFoundException]
        '-----
        ' En este ejemplo, el objeto FileSystemInfo no existe físicamente en el disco
        ' aunque esta correctamente creado
        '----------------------------------------------
        'Fichero: E:\Borrar\borrar.noExiste
        'Listado de sus atributos:
        ' [X] - ReadOnly           
        ' [X] - Hidden             
        ' [X] - System             
        ' [X] - Directory          
        ' [X] - Archive            
        ' [X] - Device             
        ' [X] - Normal             
        ' [X] - Temporary          
        ' [X] - SparseFile         
        ' [X] - ReparsePoint       
        ' [X] - Compressed         
        ' [X] - Offline            
        ' [X] - NotContentIndexed  
        ' [X] - Encrypted 
        '----------------------------------------------
        

↑↑↑

A.2.Enlaces

[Para saber mas]
[Grupo de documentos]
[Documento Index]
[Documento Start]
[Imprimir el Documento]