jueves 1 de febrero de 2007

Obtener datos de un archivo (Ampliado)

Con esta clase podras obtener los datos de la ubicación de un archivo
(VB.NET)
Esta clase puede recibir cinco parametros:

.p_Filtro: Filtra por extencion. ejemplo "Solo texto (*.txt)*.txt"

.p_Titulo: Coloca un titulo al cuadro de dialog

.p_Busqueda: Permite buscar archivos especificos. ejemplo "*.dani*.*"

.p_Abrir_Explorador: Activa o desactiva la apertura del explorador de archivos. (True o False)

.p_Ruta: Puede pasar una ruta directamente si no activa el explorador.


Esta clase retorna los siguientes resultados:

_Unidad: Es la letra de la unidad "c:\"
_Directorio: Es el directorio en donde esta el archivo "pruebas"
_Ruta: Es la ruta completa de donde esta ubicado el archivo: "c:\pruebas\"
_Archivo: Es el nombre y extensión del archivo "archivo.txt"
_Archivos: Retorna una matris con todos los archivos en un directorio, si filta con .p_Busqueda retorna las coincidencias.
_Completo: Es toda la ruta con el nombre del archivo "c:\pruebas\archivo.txt"
_Nombre: Devuelve solo el nombre del archivo "archivo"
_extensión: Devuelve solo la extensión del archivo "txt"
_F_Creacion: Retorna la fecha de creacion del archivo.
_F_ult_Acceso: Retorna la fecha de la ultima vez en que el archivo fue accedio, por ejemplo la ultima vez que se abrio.
_F_Modificacion: Retorna la fecha en que el archivo fue modificado.
_Unidades: Retorna un array con todas las unidades en el equipo. C:\, D:\, E:\, etc...
_Atributos: Retorna el codigo del atributo del archivo, 32=Normal, 33=Solo lectura, 34=Oculto, 35=Solo lectura y Oculto
Si escribe el nombre de un archivo que no existe, este sera creado y se le pondra por defecto la extensión que este en ese momento seleccionada en el filtro.
Si por parametros pasa una direccion inexistente o si abre el explorador y lo cierra sin seleccionar archivo retornara un punto "." esto se puede utilizar para enviar algun tipo de mensaje.

Public Class Archivos

' Permite la busqueda de un archivo en el equipo abriendo una ventana de exploracion

#Region "Buscar Archivo"

Public Structure Datos_de_archivo

Private Ubicacion As String

Private Unidad, Ruta, Directorio, Archivo, Nombre, Extencion As String

Private F_Creacion, F_Ult_Acceso, F_Escritura As String

Private Unidades(), Busqueda() As String

Private Atributos As String

' Variables publicas para el seteo de las busquedas.

Public p_Filtro As String ' Filtra por extencion. ejemplo "Solo texto (*.txt)*.txt"

Public p_Titulo As String ' Coloca un titulo al cuadro de dialog

Public p_Busqueda As String ' Permite buscar archivos especificos. ejemplo "*.dani*.*"

Public p_Abrir_Explorador As Boolean

Public p_Ruta As String

' Funcion que abre el cuadro de navegacion

Private Function Buscar_Archivo()

If p_Filtro = "" Then

p_Filtro = "Todos los archivos (*.*)*.*"

End If

If p_Titulo = "" Then

p_Titulo = "Titulo de la ventana de exploracion"

End If

Dim Open As New OpenFileDialog

Dim Directory As Directory

' Setea el tipo de extencion que permite

Open.Filter() = p_Filtro

' Pone titulo al cuadro de dialog

Open.Title = p_Titulo

' Obliga a que la ruta ingresada exista...

Open.CheckPathExists = True

' No obliga a la existencia del archivo, por lo tanto puede ingresar el nombre de un archivo inexistente.

Open.CheckFileExists = False

If p_Busqueda = "" Then

p_Busqueda = ""

End If

If p_Ruta = "" Then

p_Ruta = "."

End If

If p_Ruta = "." Then

p_Abrir_Explorador = True

End If

If p_Abrir_Explorador = True Then

If Open.ShowDialog() = DialogResult.OK Then

p_Ruta = Open.FileName

Else ' Si se cancela retornara "."

ReDim Busqueda(0)

Unidad = "."

Directorio = Unidad

Ruta = Directorio

Archivo = Ruta

Nombre = Archivo

Extencion = Nombre

F_Creacion = Extencion

F_Ult_Acceso = F_Creacion

F_Escritura = F_Ult_Acceso

Busqueda(0) = F_Escritura

Exit Function

End If

Else

If p_Ruta.ToString = "" Then

Exit Function

End If

' Retorna el directorio, ejemplo \mis documentos\

'Si es el rais no retorna nada

If p_Abrir_Explorador = False Then

Try

Directory.SetCurrentDirectory(Path.GetDirectoryName(p_Ruta))

Catch ex As Exception

ReDim Busqueda(0)

Unidad = "."

Directorio = Unidad

Ruta = Directorio

Archivo = Ruta

Nombre = Archivo

Extencion = Nombre

F_Creacion = Extencion

F_Ult_Acceso = F_Creacion

F_Escritura = F_Ult_Acceso

Busqueda(0) = F_Escritura

Exit Function

End Try

Else

End If

If p_Ruta.EndsWith("\") Then

Randomize()

p_Ruta = p_Ruta & "temporal" & Format(CInt(Int((99 * Rnd()) + 1)), "00")

End If

End If

' Si el archivo no existe lo crea en la ruta especifica

If File.Exists(p_Ruta) = False Then

File.Create(p_Ruta)

End If

' Retorna la unidad, ejemplo C:\

Unidad = Directory.GetDirectoryRoot(p_Ruta)

Directorio = Directory.GetCurrentDirectory.Remove(0, Unidad.Length)

Directorio = IIf(Directorio.Length <> 0, Directorio & "\", Directorio)

' Retorna la ruta, ejemplo c:\mis docuementos\

Ruta = Directory.GetCurrentDirectory

' Retorna el nopmbre del archivo, ejemplo nombre.ext

If p_Abrir_Explorador = True Then

Archivo = p_Ruta.Remove(0, Directory.GetCurrentDirectory.Length + 1)

Else

Archivo = Path.GetFileName(p_Ruta)

End If

' Retorna el atributo del archivo

' Retorna la fechad e creacion del archivo

F_Creacion = Directory.GetCreationTime(p_Ruta)

' Retorna la fecha de la ultima vez que fue accesado el archivo

F_Ult_Acceso = Directory.GetLastAccessTime(p_Ruta)

' Retorna la fecha en la que se modifico el archivo

F_Escritura = Directory.GetLastWriteTime(p_Ruta)

' Retorna un array con los archivos encontrados en la ruta especifica

Busqueda = Directory.GetFiles(Ruta, p_Busqueda)

' Retorna los atributos del archivo.

Atributos = File.GetAttributes(p_Ruta)

End Function

' Retorna propiedades

Public Property _Unidad()

Get

Buscar_Archivo()

Return Unidad

End Get

Set(ByVal Value)

p_Ruta = Value

End Set

End Property ' Retorna la unidad

Public Property _Directorio()

Get

Buscar_Archivo()

Return Directorio

End Get

Set(ByVal Value)

p_Ruta = Value

End Set

End Property ' Retorna el directorio

Public Property _Ruta()

Get

Buscar_Archivo()

Return Ruta

End Get

Set(ByVal Value)

p_Ruta = Value

End Set

End Property ' Retorna la ruta completa: unidad+directorio

Public Property _Archivo()

Get

Buscar_Archivo()

Return Archivo

End Get

Set(ByVal Value)

p_Ruta = Value

End Set

End Property ' Retorna el nombre del archivo

Public Property _Archivos()

Get

Buscar_Archivo()

Return Busqueda

End Get

Set(ByVal Value)

p_Ruta = Value

End Set

End Property ' Retorna el nombre del archivo

Public Property _Completo()

Get

Buscar_Archivo()

Return IIf(Ruta = ".", ".", Ruta & "\" & Archivo) ' Si Ruta esta vacio retorna vacio.

End Get

Set(ByVal Value)

p_Ruta = Value

End Set

End Property ' Retorna todo: ruta + archivo

Public Property _Nombre() ' Retorna solo el nombre del archivo

Get

Buscar_Archivo()

If Nombre = "." Then

Exit Property

End If

Dim contador As Integer

contador = Archivo.Length - 1

Do

If Archivo.Chars(contador) = Convert.ToChar(".") Or contador = 0 Then

Exit Do

End If

Nombre = Archivo.Substring(0, contador).ToString

contador = contador - 1

Loop

Nombre = Nombre.Remove(Nombre.Length - 1, 1)

IIf(Nombre = "", Archivo, Nombre)

Return Nombre

End Get

Set(ByVal Value)

p_Ruta = Value

End Set

End Property ' Retorna solo el nombre del archivo

Public Property _Extencion() ' Retorna solo el nombre del archivo

Get

Buscar_Archivo()

If Extencion = "." Then

Exit Property

End If

Dim contador As Integer

contador = Archivo.Length - 1

Do

If Archivo.Chars(contador) = Convert.ToChar(".") Or contador = 0 Then

Exit Do

End If

Extencion = Archivo.Remove(0, contador).ToString

contador = contador - 1

Loop

IIf(Extencion = "", "", Extencion)

Return Extencion

End Get

Set(ByVal Value)

p_Ruta = Value

End Set

End Property ' Retorna solo la extencion del archivo

Public Property _F_Creacion()

Get

Buscar_Archivo()

Return F_Creacion

End Get

Set(ByVal Value)

p_Ruta = Value

End Set

End Property ' Retorna la fecha de creacio del archivo

Public Property _F_ult_Acceso()

Get

Buscar_Archivo()

Return F_Ult_Acceso

End Get

Set(ByVal Value)

p_Ruta = Value

End Set

End Property ' Retorna la fecha de la ultima vez que se accedio al archivo

Public Property _F_Modificacion()

Get

Buscar_Archivo()

Return F_Escritura

End Get

Set(ByVal Value)

p_Ruta = Value

End Set

End Property ' Retorna la fecha de la ultima modificacino del archivo

Public Property _Unidades()

Get

Dim Directory As Directory

Unidades = Directory.GetLogicalDrives

Return Unidades

End Get

Set(ByVal Value)

p_Ruta = Value

End Set

End Property ' Retorna un array con las letras de las unidades en el equipo

Public Property _Atributos()

Get

Buscar_Archivo()

Return Atributos

End Get

Set(ByVal Value)

p_Ruta = Value

End Set

End Property ' Retorna el atributo del archivo

Private Property _Abrir_Explorador()

Get

Buscar_Archivo()

Return Busqueda

End Get

Set(ByVal Value)

p_Abrir_Explorador = Value

End Set

End Property ' Determina si se abrira el explorador de archivos o no

End Structure ' Retorna datos especificos de un archivo en particular

#End Region

End Class


Ejemplos de utilizacion:

'' Para poder ejecutar este ejemplo debera tener en el formulario un ListBox

Dim directorio As New Archivos.Datos_de_archivo

'directorio.p_Filtro = "Solo Texto*.txt" ' Busca archivos con extencion .TXT

directorio.p_Titulo = "Daniel G. Samborski"

' Si la ruta es inexistente todos los resultados regresan "."

directorio.p_Ruta = "C:\Documents and Settings\Administrador\Mis documentos\bartolo2.txt"

'' Abriendo el explorador al pedir cada dato

'directorio.p_Abrir_Explorador = True

'MessageBox.Show("Archivo: " & directorio._Archivo)

'MessageBox.Show("Atributos: " & directorio._Atributos)

'MessageBox.Show("Completo: " & directorio._Completo)

'MessageBox.Show("Directorio: " & directorio._Directorio)

'MessageBox.Show("Extencion: " & directorio._Extencion)

'MessageBox.Show("Fecha de Creacion: " & directorio._F_Creacion)

'MessageBox.Show("Fecha de modificacion: " & directorio._F_Modificacion)

'MessageBox.Show("Fecha de ultimo acceso: " & directorio._F_ult_Acceso)

'MessageBox.Show("Nombre: " & directorio._Nombre)

'MessageBox.Show("Ruta: " & directorio._Ruta)

'MessageBox.Show("Unidad: " & directorio._Unidad)

' Pasandole el archivo por una cadena.

directorio.p_Abrir_Explorador = False

Me.ListBox1.Items.Add("Datos del archivo:")

Me.ListBox1.Items.Add("Archivo: " & directorio._Archivo)

Me.ListBox1.Items.Add("Atributos: " & directorio._Atributos)

Me.ListBox1.Items.Add("Completo: " & directorio._Completo)

Me.ListBox1.Items.Add("Directorio: " & directorio._Directorio)

Me.ListBox1.Items.Add("Extencion: " & directorio._Extencion)

Me.ListBox1.Items.Add("Fecha de Creacion: " & directorio._F_Creacion)

Me.ListBox1.Items.Add("Fecha de modificacion: " & directorio._F_Modificacion)

Me.ListBox1.Items.Add("Fecha de ultimo acceso: " & directorio._F_ult_Acceso)

Me.ListBox1.Items.Add("Nombre: " & directorio._Nombre)

Me.ListBox1.Items.Add("Ruta: " & directorio._Ruta)

Me.ListBox1.Items.Add("Unidad: " & directorio._Unidad)

Me.ListBox1.Items.Add("-------------------")

Me.ListBox1.Items.Add("Unidades:")

' Busca las letras de todas las unidades de la computadora

Dim index As Integer

Dim unidades As Array

unidades = directorio._Unidades

For index = 0 To unidades.Length - 1

Me.ListBox1.Items.Add(unidades(index))

Next

' Busca todas las apariciones de un formato en particular en el directroio.

Me.ListBox1.Items.Add("-------------------")

Me.ListBox1.Items.Add("Busquedas:")

directorio.p_Busqueda = "*dan*.txt"

unidades = directorio._Archivos

For index = 0 To unidades.Length - 1

Me.ListBox1.Items.Add(unidades(index))

Next