You are on page 1of 6

Tutorial: Interaccin con archivos y carpetas en Visual Basic .

NET
[Este tema es documentacin de una versin no final y est sujeta a modificaciones en el futuro. Los temas en blanco se incluyen como marcadores de posicin.] Equipo de Visual Studio Microsoft Corporation Enero de 2002 Resumen: en este artculo se proporciona una introduccin a los principios bsicos de E/S de archivos en Microsoft Visual Basic .NET. Para ilustrar las caractersticas se ha creado una pequea aplicacin que examina archivos de texto en un directorio y se ofrece informacin acerca de los atributos, la fecha del ltimo acceso y los primeros 80 caracteres del archivo. Asimismo, se incluye una opcin que escribe la informacin en un archivo de registro. (10 pginas impresas.) Contenido Introduccin Creacin de la aplicacin Visualizacin del directorio actual Cambio de directorio Comprobacin de la introduccin de una ruta vlida Visualizacin del contenido del directorio en un cuadro de lista Permitir a un usuario la seleccin y examen de un archivo Visualizacin de los resultados Almacenamiento de los resultados Comprobacin de la aplicacin Conclusiones

Introduccin
En ltima instancia, todos los desarrolladores necesitan interactuar con archivos y directorios. Entre las tareas bsicas que una aplicacin puede necesitar realizar se encuentran las siguientes:

Escribir los resultados en un archivo de registro, lo que implica determinar si existe un archivo de este tipo, si no es as, plantear su creacin y adjuntar la informacin obtenida. Recopilar informacin sobre archivos como, por ejemplo, la fecha de acceso ms reciente o el tamao de los mismos. Generar y mostrar una lista de los archivos de un directorio, operacin que tambin puede requerir el desplazamiento de un directorio a otro.

Los desarrolladores que lleven a cabo estas tareas deben comprender los mtodos y las clases que se encuentran disponibles. En este artculo se utilizarn las funciones de E/S de archivos de Microsoft Visual Basic .NET para crear una aplicacin, FileExplorer, con la que se podr explorar un directorio, determinar y visualizar la informacin sobre los archivos del mismo y, finalmente, escribir la informacin en un archivo de registro. Una vez completadas estas operaciones, se podr seleccionar un archivo mediante programacin, extraer la informacin sobre el mismo y escribir dicha informacin en un archivo de registro.

Creacin de la aplicacin
Para comenzar el proyecto se debe crear un formulario desde el que los usuarios puedan seleccionar un directorio y elegir un archivo desde dicho directorio, as como la informacin que se desea recuperar sobre el archivo. Para crear el proyecto 1. En el men File, seleccione New y, a continuacin, haga clic en Project. Aparecer el cuadro de dilogo New Project. 2. 3. En el panel Project Types, haga clic en Visual Basic Projects y, a continuacin, en la opcin Windows Application del panel Templates. En el cuadro Name escriba FileExplorer para establecer el nombre del proyecto. Visual Studio agregar el proyecto al Explorador de soluciones y se abrir el Diseador de Windows Forms. 4. Agregue los controles de la siguiente tabla al formulario y establezca los valores correspondientes para sus propiedades. Objeto TextBox Propiedades Valor Name txtDirectory Text Directory

Button Button ListBox CheckBox

Name Text Name Text Name Name Text Checked Name Text Checked Name Text Checked

btnSubmit &Submit btnExamine &Examine lstFilePick chkAttributes Attributes True chkFileLength File Length True chkLastAccess Last Access Time True chkFirstLine Show First Line True chkSave Save Results False

CheckBox

CheckBox

CheckBox

Name Text Checked Name Text Checked

Checkbox

Visualizacin del directorio actual


Todas las exploraciones deben disponer de un punto de inicio, por lo tanto, el cuadro de texto txtDirectory utiliza la funcin CurDir para devolver y mostrar una cadena que represente la ruta actual. Para volver al directorio actual

1.
2.

Agregue el siguiente cdigo a


txtDirectory.Text = CurDir()

Form1_Load

de modo que el cuadro de texto txtDirectory muestre la ubicacin actual.

Ejecute el programa para comprobar que la funcin CurDir devuelve la ruta correcta. El cuadro de texto txtDirectory muestra el directorio actual.

Cambio de directorio
Si un usuario desea seleccionar archivos en un directorio distinto, la aplicacin utiliza la funcin ChDir para cambiar los directorios. Para cambiar a un directorio distinto, se debe introducir una nueva ruta en el cuadro de texto txtDirectory. Para cambiar los directorios

Agregue el siguiente cdigo a


Dim NewPath As String

btnSubmit_Click.

' NewPath incluye la ruta que el usuario ha introducido. NewPath = txtDirectory.Text ' Cambiar la ubicacin a NewPath. ChDir(NewPath)

Comprobacin de la introduccin de una ruta vlida


La funcin ChDir requiere el parmetro Path, que puede incluir o no la letra de la unidad. Si la ruta no especifica la unidad, ChDir utilizar la actual. Para evitar este punto de confusin, la aplicacin incorpora una instruccin Try...Catch que incluye dichas

excepciones y las que proceden del envo de una ruta en blanco. Para asegurar que se introducen rutas vlidas

1. 2. 3.
4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.

En el evento

btnSubmit_Click,

tras la lnea de cdigo


ChDir(NewPath),

Dim NewPath As String,

agregue

Dim ErrorMessage As String

en una nueva lnea.

Antes de la lnea de cdigo


Try

agregue una instruccin Try en su propia lnea de la siguiente manera:

Tras la lnea de cdigo

ChDir(NewPath), agregue lo siguiente: ' Con esta operacin se comprueba que la ruta no est en blanco. Catch ex As Exception When NewPath = "" ErrorMessage = "Se debe introducir una ruta." ' Con esta operacin se localizan los errores causados por una ruta no vlida. Catch ErrorMessage = "Se debe introducir una ruta vlida. Si se intenta _ tener acceso a una unidad distinta, no olvidar incluir la letra _ correspondiente." Finally ' Mostrar el mensaje de error slo si existe alguno. If ErrorMessage <> "" Then MsgBox(ErrorMessage) End If End Try

Visualizacin del contenido del directorio en un cuadro de lista


Para que la aplicacin pueda mostrar el contenido del directorio actual, se puede utilizar la funcin Dir que devuelve una cadena que, a su vez, representa el nombre del archivo, directorio o carpeta que coincide con un modelo especificado. Debido a que la funcin Dir devuelve nicamente el primer elemento coincidente, la aplicacin incluye una instruccin Do Until...Loop para comprobar todos los elementos. El siguiente cdigo agregado al botn Submit tambin restringe los tipos de archivos incluidos en los .txt. Nota En este proceso se aprovecha el hecho de que la llamada a la funcin Dir sin argumentos deja al modelo coincidente anterior en su lugar. Para mostrar el contenido del directorio

1. 2.
3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.

Inserte

Dim ContentItem As String

al principio del eventobtnSubmit_Click.

Tras la lnea

End Try inserte: LstFilePick.Items.Clear ' Slo hace referencia a los archivos .txt. ContentItem = Dir("*.txt") If ContentItem = "" Then ErrorMessage = "No se han encontrado archivos de texto" MsgBox(ErrorMessage) End If ' Repetir a travs del contenido del directorio. Do Until ContentItem = "" ' Agregarlo a la lista. lstFilePick.Items.Add(ContentItem) ' Desplazarse al siguiente archivo de texto. ContentItem = Dir() Loop

La informacin recopilada se muestra en el cuadro de lista lstFilePick desde el que se podr seleccionar un archivo especfico para examinar. Compruebe la aplicacin ejecutndola por primera vez en un directorio que no contenga ningn archivo .txt y, a continuacin, en otro que incluya varios archivos de este mismo tipo. En primer lugar, la aplicacin mostrar el cuadro de mensaje del error correspondiente. Posteriormente, aparecern todos los archivos .txt en el directorio especificado en el cuadro de texto txtDirectory.

Permitir a un usuario la seleccin y examen de un archivo


Aunque el cuadro de lista lstFilePick muestra todos los archivos en un directorio, probablemente el usuario desee seleccionar y examinar un archivo especfico.

Agregue el siguiente cdigo al comienzo del evento


Dim thisFile As Object thisFile = lstFilePick.SelectedItem

btnExamine_Click

para confirmar la seleccin de un archivo.

' Comprobar para asegurarse de que el archivo se ha seleccionado. If thisFile Is Nothing Then MsgBox("No se ha seleccionado ningn archivo".) Exit Sub End If

Permitir que el usuario determine qu informacin puede recopilar

Ahora que los archivos aparecen en el cuadro de lista lstFilePick, el cdigo adicional permitir al usuario especificar la informacin obtenida. Por ejemplo, se puede desear conocer simplemente la fecha en la que se tuvo acceso al archivo por ltima vez, o bien, el tamao de un archivo. Para personalizar los resultados el usuario podr activar o desactivar una serie de casillas de verificacin (chkAttributes, chkLastAccess, chkFileLength, chkFirstLine). Para visualizar informacin especfica

1.
2. 3. 4. 5. 6. 7.

Declare estas variables al comienzo del evento


Dim Dim Dim Dim Dim Dim Dim Attributes As FileAttribute AttributeResult As String LastAccess As Date Length As Long FirstLine As String FinalString As String ErrorMessage As String

btnExamine_Click:

La funcin GetAttr devuelve un miembro de la enumeracin FileAttribute que representa el atributo de un archivo, directorio o carpeta. El valor devuelto es una suma de sus valores de enumeracin. Para determinar qu atributos se definen, utilice el operador And para realizar una comparacin bit a bit entre el valor que devuelve GetAttr y el del atributo del archivo deseado. Debido a que la aplicacin busca nicamente archivos de texto, es razonable ignorar algunos valores que posiblemente haya devuelto GetAttr; por ejemplo, Directory y System.

8.
9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.

Agregue el siguiente cdigo al evento archivo.

btnExamine_Click

detrs de

End If

para que el usuario pueda comprobar los atributos del

' Comprobar atributos. If chkAttributes.Checked = True Then Attributes = GetAttr(thisFile) If Attributes = 2 Then AttributeResult = "ReadOnly" ElseIf Attributes = 32 Then AttributeResult = "Archive" ElseIf Attributes = 34 Then AttributeResult = "ReadOnly y Archive" Else AttributeResult = "Normal" End If ' Agregar esto al cuadro de mensaje de resultados. stringAttributes = "Los atributos del archivo son: " FinalString = stringAttributes + AttributeResult + "." + _ vbCr End If

25. Agregue el siguiente cdigo al evento btnExamine_Click.


26. 27. 28. ' Comprobar fecha del ltimo acceso. If chkLastAccess.checked = True Then LastAccess = FileDateTime(thisFile) End If

La funcin FileDateTime determina la fecha del ltimo acceso al archivo. El valor devuelto Date indica la fecha y la hora de creacin del archivo o de su ltima modificacin.

29. Agregue el siguiente cdigo al evento btnExamine_Click.


30. 31. 32. ' Comprobar tamao. If chkFileLength.checked = True Then Length = FileLen(thisFile) End If

La funcin FileLen, que determina el tamao del archivo, devuelve un valor Long que especifica el tamao del archivo en bytes.

33. Agregue el siguiente cdigo al evento btnExamine_Click para que el usuario pueda obtener la primera lnea del archivo.
34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. ' Comprobar la primera lnea. If chkFirstLine.Checked = True Then Try FileOpen(1, thisFile, OpenMode.Input) FirstLine = (InputString(1, 80)) Catch ex As Exception ErrorMessage = "Existe algn error en el archivo que se_ est intentando examinar. Comprobar que se trata de un _ archivo de texto que no est vaco." MsgBox (ErrorMessage) Exit Sub End Try FileClose(1) End If

Visualizacin de los resultados


Para completar la funcionalidad de la aplicacin, MsgBox notificar la informacin recopilada. Para visualizar los resultados

1.
2. 3. 4. 5. 6. 7. 8.

Al principio del evento

btnExamine_Click, declare e inicialice Dim stringAttributes As String stringAttributes = "Los atributos del archivo son: " Dim stringLastAccess As String stringLastAccess = "Fecha del ltimo acceso al archivo: " Dim stringLength As String stringLength = "El tamao en bytes del archivo es: " Dim strFirstLine As String strFirstLine = "Los primeros 80 caracteres son: "

las siguientes variables:

9.
10.

Al final de la instruccin If, que determina si la casilla de verificacin antes de la ltima instruccin End If.
' Agregar el siguiente cdigo al cuadro de mensaje de resultados FinalString = stringAttributes + AttributeResult + "." + vbCr

chkAttributes

se ha activado o no, agregue lo siguiente

11. Al final de la instruccin If, que determina si la casilla de verificacin chkLastAccess se ha activado o no, agregue lo siguiente
12. 13.

antes de la ltima instruccin

End If. 'Agregar al cuadro de mensaje. FinalString = FinalString + stringLastAccess + LastAccess + "." _ + vbCr

14. Al final de la instruccin If, que determina si la casilla de verificacin chkFileLength se ha activado o no, agregue lo siguiente
15. 16.

antes de la ltima instruccin

End If. 'Agregar al cuadro de mensaje. FinalString = FinalString + stringLength + CStr(Length) + "." _ + vbCr

17. Al final de la instruccin If, que determina si la casilla de verificacin chkFirstLine se ha activado o no, agregue lo siguiente
18.

antes de la ltima instruccin

End If. 'Agregar al cuadro de mensaje. FinalString = FinalString + strFirstLine + Firstline + vbCr

19. Al final de la funcin, agregue lo siguiente antes de la ltima instruccin End Sub.
20. 21. 22. 23. If FinalString = "" Then MsgBox("No se ha activado ninguna casilla de verificacin.") Else MsgBox(FinalString) End If

Almacenamiento de los resultados


Se puede optar por guardar los resultados del anlisis de un archivo. Para ello, se debe agregar cdigo con el que se compruebe si existe un archivo de registro, crear uno si es necesario y, a continuacin, escribir los resultados en el mismo. Para crear un archivo de registro Agregue el siguiente cdigo al final del evento
' Comprobar si los resultados se deben guardar. If chkSave.Checked = True Then ' FileOpen crear el archivo si no existe. FileOpen(1, "log.txt", OpenMode.Append) Writeline (1, finalString) FileClose(1) End If btnExamine_Click

Comprobacin de la aplicacin
1. En el directorio deseado, cree un archivo de texto denominado test.txt con la siguiente primera lnea: "sta es la primera lnea del primer archivo. La aplicacin FileExplorer solo examina archivos de texto". En el mismo directorio, cree un segundo archivo de texto denominado test2.txt con la siguiente primera lnea: "sta es la primera lnea del segundo archivo. La aplicacin FileExplorer solo examina archivos de texto". Inicie la aplicacin. Escriba una ruta no vlida y haga clic en Submit. Aparecer un mensaje en el que se indica que se debe introducir una ruta vlida; que si se intenta tener acceso a una unidad distinta, no se debe olvidar incluir la letra correspondiente. 4. Escriba la ruta al directorio que almacene test.txt y haga clic en Submit. El cuadro de lista lstFilePick mostrar los archivos de texto. 5. En el cuadro de lista lstFilePick seleccione test.txt. Compruebe que todas las casillas de verificacin se hayan activado y haga clic en Examine. En el formulario de resultados se incluirn los atributos del archivo, la fecha del ltimo acceso, el tamao y sus primeros 80 caracteres. 6. En el cuadro de lista lstFilePick seleccione test2.txt, desactive todas las casillas de verificacin y haga clic en Examine. Aparecer un mensaje de error en el que se indicar que no se ha activado ninguna casilla de verificacin. 7. Seleccione Attributes y Save Results y haga clic en Examine. En el formulario de resultados se incluirn nicamente los atributos del archivo. 8. Cierre FileExplorer.

2. 3.

Al seleccionar la opcin Save Results, FileExplorer genera un archivo de registro llamado log.txt en el mismo directorio que los archivos

de texto. Para comprobar el registro

En el directorio actual, abra el archivo log.txt y confirme que FileExplorer haya registrado la informacin correcta.

Conclusiones
En este artculo se han analizado algunos de los principios bsicos de E/S de archivos en Visual Basic .NET, aunque esto es slo el comienzo. A medida que se escriba cdigo con el que se manipulen archivos, directorios y unidades, se puede optar por desligarse de las funciones especficas en tiempo de ejecucin de Visual Basic con el fin de explorar el espacio de nombre System.IO que, a su vez, proporciona clases comunes a todos los lenguajes en Microsoft Visual Studio .NET. Por ejemplo, se incluye la clase FileSystemWatcher, que genera eventos cuando un directorio o archivo cambia. Para obtener ms informacin consulte el tema relativo al trabajo con E/S.

You might also like