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
OpenTextFilePuedes 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:
- Crea un nuevo proyecto, se añade automáticamente un formulario (Form1)
- Haz una referencia al objeto del sistema de archivos, para ello abre el menú Proyecto/Referencias... y selecciona Microsoft Scripting Runtime (ScrRun.dll)
- Añade los siguientes controles, para que quede como en la imagen:
- 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