Professional Documents
Culture Documents
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
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
Checkbox
1.
2.
Form1_Load
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
btnSubmit_Click.
' NewPath incluye la ruta que el usuario ha introducido. NewPath = txtDirectory.Text ' Cambiar la ubicacin a NewPath. ChDir(NewPath)
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,
agregue
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
1. 2.
3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Inserte
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.
btnExamine_Click
' 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
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.
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.
btnExamine_Click
detrs de
End If
' 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
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.
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
1.
2. 3. 4. 5. 6. 7. 8.
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: "
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
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.
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.
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.
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
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
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.