none
Sacar Metadato Autor de un archivo RRS feed

  • Pregunta

  • Muy buenas tardes compañeros,

    Actualmente una ayuda por parte de ustedes y es que necesito conocer la forma de extraer el usuario de windows que creo un archivo, esto se le llama autor.

    si alguno sabe como sacar este metadato del archivo se los agradezco mucho.


    martes, 27 de octubre de 2015 20:57

Respuestas

  • "Como sacar textos de un textbox en vb.net" preguntó:

    > necesito conocer la forma de extraer el usuario de windows que creo
    > un archivo, esto se le llama autor.

    Hola:

    Si estamos hablando de cualquier archivo de los existentes en el sistema de archivos de Windows, más que el "autor" del archivo, entiendo que lo que deseas obtener es el Propietario del archivo, que si bien pueden considerarse términos sinónimos, el sistema operativo habla de Propietario (Owner) no de Autor (Author), al menos es el término que aparece en las Propiedades del archivo, pestaña Detalles.

    Si es el nombre de la cuenta de usuario o grupo que actualmente es el propietario de un archivo lo que deseas extraer, tan solo tienes que recuperar el valor de la propiedad Value de un objeto System.Security.Principal.NTAccount, aunque también es verdad que para llegar a ese valor hay que ejecutar una serie de operaciones, tal como muestra la siguiente función:

    ' Espacios de nombres que hay que importar:
    Imports System.IO
    Imports System.Security
    Imports System.Security.Principal
    
        ''' <summary>
        ''' Devuelve el nombre de la cuenta de usuario o grupo
        ''' propietario del archivo especificado en el formato
        ''' Nombre Dominio/Nombre Cuenta.
        ''' </summary>
        ''' <param name="fileName">Ruta del archivo cuya propietario se desea obtener.
        ''' </param>
        ''' <author>Enrique M. Montejo - 2015</author>
        ''' <returns></returns>
        Public Shared Function GetOwner(fileName As String) As String
    
            ' Verificar el valor del parámetro especificado.
            '
            If (String.IsNullOrEmpty(fileName)) Then
                Throw New ArgumentException("No se ha especificado archivo alguno.")
            End If
    
            If (Not File.Exists(fileName)) Then
    ' No existe el archivo. Throw New FileNotFoundException() End If ' Creamos un objeto DirectoryInfo con la ruta del archivo especificado. Dim di As New DirectoryInfo(fileName) ' Obtenemos un objeto DirectorySecurity para obtener los derechos ' de acceso y auditoría correspondientes al archivo. ' Dim ds As AccessControl.DirectorySecurity = di.GetAccessControl() ' Obtenemos el propietario del archivo que se encuentra asociado ' al System.Type del grupo primario que se haya especificado, el ' cual puede ser el Type de un objeto NTAccount (para obtener la ' información de la cuenta de un usuario o grupo), o el Type de ' un objeto SecurityIdentifier (para obtener el identificador de ' seguridad o SID de la cuenta de un usuario o grupo). ' ' En éste caso nos interesa conocer el nombre de la cuenta, no su SID, ' por lo que al método GetOwner le pasamos el System.Type de un objeto ' NTAccount. ' Dim identity As IdentityReference = ds.GetOwner(GetType(NTAccount)) ' Convertimos el objeto IdentityReference (clase base) en un objeto ' NTAccount (clase derivada), que es el tipo de objeto que hemos ' utilizado para obtener el propietario del archivo. ' Dim account As NTAccount = DirectCast(identity, NTAccount) ' Devolvemos el valor del objeto. ' Return account.Value End Function

    El código de la función se puede abreviar un poco obteniendo implícitamente los objetos necesarios, pero prefiero mostrarlo de una manera más explícita para que usuarios no avanzados conozcan, paso a paso, lo que hay que ejecutar para conocer el propietario de un archivo. ;-)

    Cuando quieras conocer la cuenta propietaria de un archivo, llamarías a la función de la siguiente manera:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Mostramos un cuadro de diálogo para seleccionar un archivo cualquiera.
            '
            Dim fileName As String = String.Empty
            Using ofd As New OpenFileDialog()
                ofd.Filter = "Todos los archivos|*.*"
                Dim dr As DialogResult = ofd.ShowDialog()
                If (dr = DialogResult.OK) Then
                    fileName = ofd.FileName
                End If
            End Using
    
            If (Not fileName = String.Empty) Then
                Try
                    ' Obtenemos el propietario del archivo seleccionado.
                    '
                    Dim owner As String = GetOwner(fileName)
                    MessageBox.Show(owner)
    
                Catch ex As Exception
                    ' Se ha producido un error.
                    MessageBox.Show(ex.Message)
    
                End Try
            End If
    
        End Sub

    Por último indicar que el código requiere ejecutarse en un sistema operativo con Windows Vista SP2 o Windows Server 2008, o versiones superiores a éstas.

    ¡Eso es todo!

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    viernes, 30 de octubre de 2015 9:10
    Moderador