Colaboraciones en el Guille

Creando un Explorador de Windows

 

Fecha: 23/Oct/2005 (21 de Octubre de 2005)
Autor: Ing. Fernando Luque Sánchez  
DCE 2003  - 4 Estrellas
DCE 2005 - 2 Estrellas

[email protected]


Sres. Desarrolladores, este aporte pretende ayudar a ustedes a crear una pequeña aplicación simulando el Explorador de Windows, en este segundo envío, solamente está implementada la funcionalidad para ver los archivos y carpetas.

Este ejemplo incluye el uso de controles para su ejecución directamente desde el IDE, en el ejemplo anterior se creó la aplicación usando Clases de componentes. El link es el siguiente:

FernandoLuque_Explorador01.htm

Un poco de teoría

El NameSpace System.IO (lo mismo del artículo anterior)
Este NameSpace contiene todos los tipos que permiten leer y escribir en los archivos y secuencia de datos, así como tipos que proporcionan compatibilidad básica con los archivos y directorios.

Algunas Clases de System.IO

Clase Descripción
Directory Expone métodos estáticos para crear, mover y enumerar archivos en directorios y subdirectorios
DirectoryInfo Expone métodos de instancia para crear, mover y enumerar archivos en directorios y subdirectorios.
File

Proporciona métodos estáticos para crear, copiar, eliminar, mover y abrir archivos y contribuye a la creación de objetos FileStream.
Utilice la clase FileStream para leer, escribir, abrir y cerrar archivos en un sistema de archivos, así como para manipular otros identificadores del sistema operativo relacionados con archivos, como canalizaciones, entrada estándar y salida estándar amd. Puede especificar que las operaciones de lectura y escritura sean sincrónicas o asincrónicas. FileStream almacena en el búfer la entrada y la salida para obtener un mejor rendimiento.

FileInfo Proporciona métodos de instancia para crear, copiar, eliminar, mover y abrir archivos y contribuye a la creación de objetos FileStream.
FileStream

Expone un objeto Stream alrededor de un archivo; se admiten operaciones de lectura y escritura sincrónica y asincrónica. Un objeto Stream proporciona una vista genérica de una secuencia de bytes.

Path

Ejecuta operaciones en instancias de String que contienen información de rutas de archivos o directorios. Estas operaciones se ejecutan de forma adecuada para múltiples plataformas.

El Ejemplo

El formulario en tiempo de ejecución tiene el siguiente aspecto

Explorador de Windows

 

A continuación sigue código en Visual Basic:

Al Cargar el Formulario

    Private Sub Cargar(ByVal sender As System.Object, _

        ByVal e As System.EventArgs) Handles MyBase.Load

        LlenarArbol()

        AgregarArchivos(tvDir.SelectedNode.Text)

    End Sub

El procedimiento para llenar el TreeView

   Private Sub LlenarArbol()
        tvDir.BeginUpdate()
        tvDir.Nodes.Clear()
        ' Drives como principales
        Dim astrDrives As String() = Directory.GetLogicalDrives()
        Dim strDrive As String
        For Each strDrive In astrDrives
            Dim tnDrive As New TreeNode(strDrive, 0, 0)
            tvDir.Nodes.Add(tnDrive)
            AgregarDir(tnDrive)
            ' Drive C por defecto
            If strDrive = "C:\" Then
                tvDir.SelectedNode = tnDrive
            End If
        Next
        tvDir.EndUpdate()
    End Sub   

Para Agregar el Directorio

Private Sub AgregarDir(ByVal tn As TreeNode)
        tn.Nodes.Clear()
         Dim strPath As String = tn.FullPath
        Dim diDirectory As New DirectoryInfo(strPath)
        Dim aDir() As DirectoryInfo 'array para subcarpetas

         Try
            ' Obtiene en un array todos los subdirectorios
            aDir = diDirectory.GetDirectories()
        Catch exp As Exception
            Exit Sub
        End Try
 
        Dim di As DirectoryInfo
        For Each di In aDir
            ' Crea un Nodo y pasa el nombre y la imagen
            Dim tnDir As New TreeNode(di.Name, 1, 2)
            'Agrega el Nodo creado
            tn.Nodes.Add(tnDir)
        Next
    End Sub

 

Para Llenar los archivos en el ListView

    'Llenar los archivos del directorio seleccionado
    Private Sub AgregarArchivos(ByVal vDir As String)
        'Por defecto esta seleccionado el directorio raíz de C:\
        lvArchivos.Items.Clear()
        'Obtener los directorios o subcarpetas
        Dim diDirectories As New DirectoryInfo(vDir)
        Dim afiFiles() As FileInfo  'Array de archivos

        Try
            ' Array de todos los archivos
            afiFiles = diDirectories.GetFiles()
        Catch
            Return    'Para que no salga error
        End Try

        Dim fi As FileInfo
        For Each fi In afiFiles
            'Crear ListViewItem y asginarle el nombre del archivo 
            Dim lvi As New ListViewItem(fi.Name)
            'Imagen
            Select Case Path.GetExtension(fi.Name).ToUpper()
                Case ".EXE"
                    lvi.ImageIndex = 1
                Case Else
                    lvi.ImageIndex = 0
            End Select
            ' Tamaño y fecha de modificación: Length - LastWriteTime
            lvi.SubItems.Add(fi.Length.ToString("N0"))
            lvi.SubItems.Add(fi.LastWriteTime.ToString())

            'Atributos
            Dim strAttr As String = ""
            If (fi.Attributes And FileAttributes.Archive) <> 0 Then strAttr += "A"
            If (fi.Attributes And FileAttributes.Hidden) <> 0 Then strAttr += "H"
            If (fi.Attributes And FileAttributes.ReadOnly) <> 0 Then strAttr += "R"
            If (fi.Attributes And FileAttributes.System) <> 0 Then strAttr += "S"
            lvi.SubItems.Add(strAttr)
            'Añadir el Item
            lvArchivos.Items.Add(lvi)
        Next fi
    End Sub

    'Procedimiento para volver a llenar los archivos del ListView
    Private Sub tvDir_AfterSelect(ByVal sender As System.Object, _
        ByVal e As System.Windows.Forms.TreeViewEventArgs) _
        Handles tvDir.AfterSelect
        'Tomar el Camino completo con e
        AgregarArchivos(e.Node.FullPath)
    End Sub

Acerca de estos controles pueden ver los artículos:

ListView
http://www.elguille.info/colabora/NET2005/FernandoLuque_Control_ListView.htm
http://www.elguille.info/colabora/NET2005/FernandoLuque_Control_ListViewII.htm
http://www.elguille.info/colabora/NET2005/FernandoLuque_ListViewAvanzado.htm
http://www.elguille.info/colabora/NET2005/FernandoLuque_ListViewBD.htm
TreeView
http://www.elguille.info/colabora/NET2005/FernandoLuque_TreViewBDatos.htm

El código completo se encuentra en el archivo adjunto al final del artículo, antes de bajarlo espero que votes por este aporte para alentarme a seguir publicando.

Suerte a todos y A SEGUIR DESARROLLANDO

Ing. Fernando Luque Sánchez
De Trujillo - Perú para el mundo entero


Espacios de nombres usados en el código de este artículo:

System.IO


Fichero con el código de ejemplo: FernandoLuque_Explorador02.zip - (11) KB


ir al índice principal del Guille