martes, 14 de julio de 2015

Receta C# No. 5-10: Buscar Archivos con Comodines

Índice

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
3.1 Métodos EnumerateFiles(string) y GetFiles(string)
3.2 Enumeración SearchOption
4. Práctica: Código C#
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

En esta oportunidad realizaremos búsqueda de archivos usando comodines. Los comodines son útiles para crear filtros de búsquedapara el refinamiento de resultados. Como ya veremos, .NET ofrece características para hacer de esta tarea algo sencillo a través de artefactos como la enumeración SearchOption y métodos de la clase DirectoryInfo: EnumerateFiles, y GetFiles.

1. Problema

Debemos crear un sistema de filtrado que nos permita refinar los resultados de búsqueda de archivos en un directorio dado.

2. Solución

En la clase Directory están disponibles los métodos GetFiles y EnumerateFiles que reciben, además, como argumento un valor de la enumeración SearchOption para establecer la exploración recursiva de subdirectorios o simplemente el directorio padre. Con GetFiles(string) podemos especificar una expresión a modo de comodin o patrón de búsqueda crear el filtro de búsqueda.

3. Discusión de la Solución

3.1 Métodos EnumerateFiles(string) y GetFiles(string)

Directory.EnumerateFiles(string) [4] y Directory.GetFiles(string) [3] reciben como argumento una cadena de caracteres que representa el patrón o comodín de búsqueda para refinar los resultados.

3.2 Enumeración SearchOption

Con la enumeración SearchOption [5] podemos especificar a las versiones sobrecargadas de EnumerateFiles(string, string) [6] y GetFiles(string, string) [7] efectuar una búsqueda recursiva, es decir, buscar en todos los subdirectorios del directorio padre (especificado en el argumento del constructor de DirectoryInfo).

4. Práctica: Código C#

Escribamos un programa basado en consola usando C# para realizar una búsqueda sobre un directorio y un filtro específicos. El usuario tendrá la posibilidad de pasar estos dos valores como argumentos desde la línea de comandos.


En las líneas 16-19 validamos que el usuario haya ingresado el número apropiado de argumentos desde la línea de comandos. Luego, en la línea 22, creamos una instancia de DirectoryInfo especificando como directorio de referencia el valor almacenado en el elemento args[0]. Una vez hecho lo anterior, pasamos a crear un arreglo de objetos FileInfo con todos los directorios que satisfagan el comodín pasado como argumento en args[1].


El ciclo foreach (líneas 29-32) enlista dos los archivos filtrados con el comodín especificado: muestra tanto el nombre del archivo como su tamaño en bytes.

Compilación:


  1. csc /target:exe BusquedaConComodin.cs

Ejecución assembly:


  1. .\BusquedaConComodin.exe

> Prueba de ejecución:
Ejecución assembly BusquedaConComodin.exe
Animación 1. Ejecución assembly BusquedaConComodin.exe.

5. Conclusiones

Hemos explorado y puesto en práctica el proceso de especificación de un comodín o patrón de búsqueda para filtrar los resultados de una búsqueda de archivos en un directorio. Este conocimiento nos será de utilidad cuando deseemos escribir, por ejemplo, una aplicación para la gestión de archivos. Las versiones sobreescritas de los métodos GetFiles y EnumerateFiles de la clase DirectoryInfo nos permiten crear soluciones de este tipo y seguramente aplicaciones más sofisticadas a medida que suplamos nuestro utillaje C#.


En la próxima receta veremos cómo podemos comparar dos archivos para determinar su igualdad.

6. Glosario

  • Archivo
  • Comodín
  • Directorio
  • Enumeración
  • Patrón

7. Literatura & Enlaces

[1]: Visual C# 2010 Recipes by Allen Jones and Adam Freeman. Copyright 2010 Allen Jones and Adam Freeman, 978-1-4302-2525-6.
[2]: DirectoryInfo Class (System.IO) - https://msdn.microsoft.com/en-us/library/system.io.directoryinfo.aspx
[3]: DirectoryInfo.GetFiles Method (String, SearchOption) (System.IO) - https://msdn.microsoft.com/en-us/library/ms143327(v=vs.110).aspx
[4]: DirectoryInfo.EnumerateFiles Method (String, SearchOption) (System.IO) - https://msdn.microsoft.com/en-us/library/dd413343(v=vs.110).aspx
[5]: SearchOption Enumeration (System.IO) - https://msdn.microsoft.com/en-us/library/ms143448(v=vs.110).aspx
[6]: DirectoryInfo.EnumerateFiles Method (String) (System.IO) - https://msdn.microsoft.com/en-us/library/dd383574(v=vs.110).aspx
[7]: DirectoryInfo.GetFiles Method (String, SearchOption) (System.IO) - https://msdn.microsoft.com/en-us/library/ms143327(v=vs.110).aspx


J

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.