lunes, 6 de julio de 2015

Receta C# No. 5-3: Copiar, Mover, o Eliminar un Directorio o Archivo

Índice

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
3.1 Métodos fundamentales para manipular archivos
3.2 Métodos fundamentales para manipular directorios
4. Práctica: Código C#
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

Pasemos a esta interesante receta para realizar tres operaciones básicas sobre archivos y directorios: copiar, mover, y eliminar. Estas tareas las realizamos como usuarios casi todo el tiempo ya sea desde una línea de comandos o desde un programa con interfaz gráfica de usuario (conocido como explorador o navegador de archivos); evidentemente, es también importante incorporar el conocimiento programático para realizar las mismas tareas usando el lenguaje de programación C#.

1. Problema

Requerimos aprender los métodos básicos para la manipulación de archivos y carpetas: copiar, mover, y eliminar.

2. Solución

Con la instanciación de objetos de las clases System.IO.FileInfo y System.IO.DirectoryInfo tenemos a nuestra disposición el conjunto de miembros funcionales para copiar, mover, y eliminar archivos y carpetas, respectivamente.

3. Discusión de la Solución

3.1 Métodos fundamentales para minular archivos

La clase FileInfo [2] (namespace System.IO) posee una serie de métodos para copiar, crear, mover, abrir, eliminar, encriptar, mover, reemplazar, entre otros más, archivos. En la Tabla 1 [1] se muestra una descripción breve de cada una de las operaciones clave sobre archivos de esta clase.
Métodos clave de la clase FileInfo
Tabla 1. Métodos clave de la clase FileInfo.
Para ejemplificar, escribamos un programa que referencie un archivo localizado en una determinada ruta, C:\etc, y cree una copia en esa misma ruta del archivo pero con un nuevo nombre.


En las líneas 15, y 16 especificamos las rutas de origen y destino con su representación literal, respectivamente. Con las dos instancias de FileInfo en las líneas 18, y 19 creamos los manejadores requeridos para la operación de copiado del archivo `ArchivoTexto.txt`. Dentro del bloque try controlamos cualquier excepción que pudiera generar el método CopyTo [4] (línea 30). Dentro de este mismo bloque, en las líneas 24-27, validamos que el archivo `CopiaArchivoTexto.txt` exista (de ser así, lo borramos con el método Delete [5]). Mostramos un mensaje de satisfacción al usuario en la línea 31.

Compilación:


  1. csc /target:exe CopiarArchivo.cs

Ejecución assembly:


  1. .\CopiarArchivo.exe

> Prueba de ejecución (local):
Ejecución assembly CopiarArchivo.exe
Figura 1. Ejecución assembly CopiarArchivo.exe.

3.2 Métodos fundamentales para manipular directorios

Al igual que FileInfo, la clase Directory [3] posee operaciones o métodos para manipular (e.g., crear, crear subdirectorio, eliminar, mover) directorios. En la Tabla 2 [1] se enlistan algunos de estos métodos junto una breve descripción.
Métodos clave de la clase DirectoryInfo
Tabla 2. Métodos clave de la clase DirectoryInfo.
También podemos crear código fuente C# para demostrar las capacidades, por ejemplo de los métodos CreateSubdirectory [6] y MoveTo [7].


Después de haber creado el directorio DirectorioTemporal en la línea 16, creamos un subdirectorio con el método CreateSubdirectory al que llamamos Subdirectorio. Este subdirectorio quedará almacenado en el directorio NuevoDirectorio (línea 25). Finalmente movemos el directorio DirectorioTemporal al directorio NuevoDirectorio (línea 35).

Compilación:


  1. csc /target:exe CrearSubdirectorio.cs

Ejecución assembly:


  1. .\UnicaInstanciaAplicacion.exe

> Prueba de ejecución (local):
Ejecución assembly CrearSubdirectorio.exe
Figura 2. Ejecución assembly CrearSubdirectorio.exe.

Después de que ejecutamos este programa C# obtenemos la siguiente estructura de directorios:
Ejecución assembly CopiarArchivo.exe (2)
Figura 3. Resultado ejecución assembly CopiarArchivo.exe.

4. Práctica: Código C#

Ejemplo práctico para copiar el contenido de un directorio en una nueva locación.


Operaciones a resaltar:
  • Líneas 16-24: Comprueba que el usuario haya introducido los argumentos correctos desde la línea de comandos.
  • Líneas 27, 28: Creación de los directorios de origen y destino con las rutas proporcionadas por el usuario.
  • Línea 32: Invocación del método recursivo CopiarDirectorio con los directorios de origen y destino:
  • Líneas 39-62: Declaración del método CopiarDirectorio:
    • Líneas 42-45: Comprobación de la existencia del directorio de destino. De no existir lo crea con el método Create.
    • Líneas 48-51: Copia de cada uno de los archivos localizados en el directorio de destino actual.
    • Líneas 54-61: Iteración por cada uno de los directorios localizados en el directorio de origen:
      • Línea 57: Creación de la representación literal del directorio de destino a explorar y copiar su contenido de forma recursiva.
      • Línea 60: Invocación recursiva del método CopiarDirectorio.
Compilación:

  1. csc /target:exe CopiarContenidoDirectorio.cs

Ejecución assembly:

  1. .\CopiarContenidoDirectorio.exe

> Prueba de ejecución (local):
Ejecución assembly CopiarContenidoDirectorio.exe
Figura 3. Ejecución assembly CopiarContenidoDirectorio.exe.

5. Conclusiones

Hemos explorado los fundamentales para las operaciones básicas sobre archivos y directorios, éstas son: copiar, mover, eliminar, crear directorio, crear subdirectorio. Este conocimiento y práctica nos será de inmensurable ayuda cuando creemos aplicaciones que requieran manipular archivos de aplicación y de usuario. En la próxima receta nos adentraremos en el cálculo del tamaño del contenido de un directorio.

6. Glosario

  • Archivo
  • Copiar
  • Directorio
  • Encriptar
  • Mover
  • Subdirectorio

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]: FileInfo Class (System.IO) - https://msdn.microsoft.com/en-us/library/system.io.fileinfo(v=vs.110).aspx
[3]: DirectoryInfo Class (System.IO) - https://msdn.microsoft.com/en-us/library/system.io.directoryinfo.aspx
[4]: FileInfo.CopyTo Method (String) (System.IO) - https://msdn.microsoft.com/en-us/library/f0e105zt(v=vs.110).aspx
[5]: FileInfo.Delete Method (System.IO) - https://msdn.microsoft.com/en-us/library/system.io.fileinfo.delete(v=vs.110).aspx
[6]: DirectoryInfo.CreateSubdirectory Method (String) (System.IO) - https://msdn.microsoft.com/en-us/library/h8dtw1d6(v=vs.110).aspx
[7]: DirectoryInfo.MoveTo Method (System.IO) - https://msdn.microsoft.com/en-us/library/system.io.directoryinfo.moveto.aspx


J

No hay comentarios:

Publicar un comentario

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