Los Trucos del Guille publicados en MSDN España

 

Lista de trucos publicados en MSDN España



Truco publicado con fecha 11/Jun/99

 

Manejar carpetas y ficheros es fácil con Visual Basic 6.0

Si necesitas crear, borrar u obtener información de carpetas y/o ficheros, ya no es necesario acudir al API para ello.

Simplemente usando un objeto del tipo FileSystemObject puedes acceder a métodos para saber si existe, crear, mover, etc., tanto carpetas como ficheros.
He aquí una relación de los métodos y propiedades de dicho objeto:
(en negrita los que veremos en el ejemplo)

BuildPath
CopyFile
CopyFolder
CreateFolder
CreateTextFile
DeleteFile
DeleteFolder
DriveExists
Drives
FileExists
FolderExists
GetAbsolutePathName
GetBaseName
GetDrive
GetDriveName
GetExtensionName
GetFile
GetFileName
GetFolder
GetParentFolderName
GetSpecialFolder
GetTempName
MoveFile
MoveFolder
OpenTextFile

Puedes imaginarte para que sirve cada uno de ellos... aunque te recomiendo que pulses F1 y lo veas en la ayuda...

De todas formas, vamos a ver unos ejemplos para manejar carpetas y ficheros usando el File System Object (objetos del sistema de archivos)

Para crear el proyecto de ejemplo:

  1. Crea un nuevo proyecto, se añade automáticamente un formulario (Form1)
  2. Haz una referencia al objeto del sistema de archivos, para ello abre el menú Proyecto/Referencias... y selecciona Microsoft Scripting Runtime (ScrRun.dll)
  3. Añade los siguientes controles, para que quede como en la imagen:
  4. Por último añade el siguiente código y después pulsa F5 para ejecutar el proyecto.
'
'------------------------------------------------------------------------------
' Tips03, trucos para MSDN España                                   (06/Jun/99)
'
' ©Guillermo 'guille' Som, 1999
'------------------------------------------------------------------------------
Option Explicit

' Variable para usar el Objeto de Sistema de Archivos (File System Object)
' Para que esta librería esté operativa hay que tener una referencia a:
' Microsoft Scripting Runtime (SCRRUN.DLL)
Private m_fso As FileSystemObject

' Constantes para el botón pulsado
Private Enum eCmdOp
    eCrear
    eEliminar
    eInfo
End Enum


Private Sub Form_Load()
    ' Crear la referencia al File System Object (objeto del sistema de archivos)
    Set m_fso = New FileSystemObject
    
    lblInfo(0) = ""
    lblInfo(1) = ""
End Sub


Private Sub Form_Unload(Cancel As Integer)
    ' Liberar la memoria usada
    Set m_fso = Nothing
    Set Form1 = Nothing
End Sub


Private Sub cmdFile_Click(Index As Integer)
    ' Manipular ficheros
    Dim fil As File		' Objeto para acceder a las propiedades de los ficheros
    Dim sNombre As String
    Dim sInfo As String
    Dim aFile As TextStream	' Objeto para acceder al "interior" del fichero
    
    ' Si se produce un error, detectarlo
    On Local Error GoTo ErrFile
    
    sNombre = txtFile
    
    ' Según el botón pulsado, hacemos la acción correspondiente
    Select Case Index

    Case eCrear
        Set aFile = m_fso.CreateTextFile(sNombre)
        ' Para mostrar la información
        Set fil = m_fso.GetFile(sNombre)
        With aFile
            .WriteLine "Prueba de escritura en fichero"
            .WriteBlankLines 2      ' un par de líneas en blanco
            .WriteLine fil.Path     ' path completo, incluido el nombre
            ' todo esto estará en la misma línea
            .Write fil.ParentFolder ' sólo el path
            .Write " - "
            .Write fil.Name         ' sólo el nombre
            .Close
        End With
        
        ' Actualizar la información del directorio
        'cmdFolder_Click eInfo
        

    Case eEliminar
        ' Comprobar si existe el fichero que se quiere borrar
        If m_fso.FileExists(sNombre) Then
            ' Si hay que confirmar el borrado...
            If chkConfirmar Then
                If MsgBox("¿Seguro que quieres eliminar el fichero " & sNombre & "?", vbExclamation + vbYesNo) = vbYes Then
                    m_fso.DeleteFile sNombre
                End If
            Else
                m_fso.DeleteFile sNombre
            End If
        Else
            MsgBox "No existe el fichero " & sNombre, vbExclamation
        End If

    Case eInfo
        Set fil = m_fso.GetFile(sNombre)
    End Select
        
    ' Si el objeto tiene información, mostrarla
    If Not (fil Is Nothing) Then
        With fil
            sInfo = "Fecha creación: " & .DateCreated & vbCrLf & _
                    "Último acceso : " & .DateLastAccessed & vbCrLf & _
                    "Modificado    : " & .DateLastModified & vbCrLf & _
                    "Tamaño        : " & .Size & vbCrLf & _
                    "Nombre corto  : " & .ShortName
        End With
        lblInfo(1) = sInfo
    Else
        lblInfo(1) = ""
    End If
    
    Exit Sub
    
ErrFile:
    
    ' Tipo de mensaje, según la acción que se estaba ejecutando
    Select Case Index
    Case eCrear
        sInfo = "crear"
    Case eEliminar
        sInfo = "eliminar"
    Case eInfo
        sInfo = "mostrar información d"
    End Select
    
    MsgBox "Se ha producido el siguiente error:" & vbCrLf & _
            Err.Number & " " & Err.Description & vbCrLf & _
            "al intentar " & sInfo & "el fichero " & sNombre
    
    ' Continuar con la siguiente línea, para que muestre la información
    Resume Next
End Sub


Private Sub cmdFolder_Click(Index As Integer)
    ' Manipular las carpetas
    Dim fldr As Folder		' Objeto para acceder a las propiedades de la carpeta
    Dim sNombre As String
    Dim sInfo As String
    
    ' Si se produce un error, detectarlo
    On Local Error GoTo ErrFolder
    
    sNombre = txtFolder
    
    ' Según el botón pulsado, hacemos la acción correspondiente
    Select Case Index

    Case eCrear
        ' Hacerlo así si vamos a usar el objeto devuelto
        'Set fldr = m_fso.CreateFolder(sNombre)
        
        m_fso.CreateFolder sNombre
        ' Esto mostrará la información, aún cuando exista,
        ' ya que al producirse el error, (con Resume Next),
        ' hacemos que continue en la siguiente instrucción
        Set fldr = m_fso.GetFolder(sNombre)

    Case eEliminar
        ' Comprobar si existe esa carpeta
        If m_fso.FolderExists(sNombre) Then
            ' Si hay que confirmar el borrado
            If chkConfirmar Then
                Set fldr = m_fso.GetFolder(sNombre)
                ' Un poco de información sobre la carpeta
                ' Nota: el número de ficheros no incluye los de las subcarpetas
                With fldr
                    sInfo = "creada el " & .DateCreated & _
                            IIf(.SubFolders.Count, vbCrLf & "con " & .SubFolders.Count & " subcarpeta(s)", "") & _
                            IIf(.Files.Count, vbCrLf & "con " & .Files.Count & " fichero(s)", "")
                End With
                If MsgBox("¿Seguro que quieres borrar esta carpeta " & vbCrLf & _
                          sInfo & "?", vbExclamation + vbYesNo) = vbYes Then
                    m_fso.DeleteFolder sNombre
                    ' Esto no es necesario hacerlo, sólo es para que no se muestre la información
                    Set fldr = Nothing
                End If
            Else
                m_fso.DeleteFolder sNombre
            End If
        Else
            MsgBox "No existe la carpeta " & sNombre, vbExclamation
        End If

    Case eInfo
        Set fldr = m_fso.GetFolder(sNombre)
    End Select
    
    ' Si el objeto tiene información, mostrarla
    If Not (fldr Is Nothing) Then
        With fldr
            sInfo = "Fecha creación: " & .DateCreated & vbCrLf & _
                    "Último acceso : " & .DateLastAccessed & vbCrLf & _
                    "Modificado    : " & .DateLastModified & vbCrLf & _
                    "nº subcarpetas: " & .SubFolders.Count & vbCrLf & _
                    "nº ficheros   : " & .Files.Count & " (no incluye las subcarpetas)"
        End With
        lblInfo(0) = sInfo
    Else
        lblInfo(0) = ""
    End If
    
    Exit Sub
    
ErrFolder:
    
    ' Tipo de mensaje, según la acción que se estaba ejecutando
    Select Case Index
    Case eCrear
        sInfo = "crear"
    Case eEliminar
        sInfo = "eliminar"
    Case eInfo
        sInfo = "mostrar información de"
    End Select
    
    MsgBox "Se ha producido el siguiente error:" & vbCrLf & _
            Err.Number & ", " & Err.Description & vbCrLf & _
            "al intentar " & sInfo & " la carpeta " & sNombre
    
    ' Continuar con la siguiente línea, para que muestre la información
    Resume Next
End Sub

la Luna del Guille o... el Guille que está en la Luna... tanto monta...