sábado, 18 de julio de 2015

Receta C# No. 5-14: Cómo Manipular Rutas Relativas

Índice

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Código C#
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

En C# podemos escribir rutas absolutas o rutas relativas para referenciar directorios y archivos; en el caso de estas últimas, estudiáremos cómo funcionan y cómo podemos obtener las rutas absolutas a partir del directorio de trabajo usando varios de los métodos disponibles en la clase System.IO.Directory.

1. Problema

Necesitamos establecer un directorio de trabajo (ruta relativa) basado en la ubicación actual del proyecto y referenciar recursos en esa misma ruta.

2. Solución

En C# contamos con la clase  System.IO.Directory y sus métodos SetCurrentDirectory y GetCurrentDirectory para establecer y obtener la ubicación actual del proyecto.

3. Discusión de la Solución

La clase Directory [2] (namespace System.IO) tiene definidos los métodos GetCurrentDirectory y SetCurrentDirectory para obtener y establecer la ruta actual del proyecto. Con esta ruta relativa podemos luego obtener la ruta absoluta usando el método static GetFullPath [5] de la clase Path [6] de archivos y directorios.


Asumamos que hemos creado un archivo en el directorio A:\C#\VisualCSharp2010Recipes\Cap05\R05-13; ahora cuando usemos el método GetCurrentDirectory obtendremos es el directorio R05-13


Ahora lo que queremos es movernos al directorio R05-14, el cual corresponde con el directorio de trabajo de la receta actual debemos escribir 

Directory.SetCurrentDirectory(@"..\R05-14");

Ejemplo de uso:

Archivo C# UsoRutaRelativa.cs [Enlace alternativo][Enlace alternativo]:

En la línea 15 asumimos que la ruta actual de trabajo es el directorio R05-13. Con la invocación de SetCurrentDirectory establecemos ese directorio como nuestro directorio de trabajo actual: línea 16. Mostramos en pantalla ese valor de directorio actual. Notemos que con 

Directory.SetCurrentDirectory(@"..\R05-14");


(línea 24) cambiamos el directorio actual de trabajo usando la ruta relativa ..\R05-14; es decir, del directorio actual R05-13 nos movemos al directorio padre y partir de ahí localizamos el directorio R05-14 y cambiamos a él.

Compilación:


  1. csc /target:exe UsoRutaRelativa.cs

Ejecución assembly:


  1. .\UsoRutaRelativa.exe

> Prueba de ejecución:
Ejecución assembly UsoRutaRelativa.exe
Figura 1. Ejecución assembly UsoRutaRelativa.exe.

4. Práctica: Código C#

Para afianzar el conocimiento práctico de la manipulación de rutas relativas, escribamos más código C#: en este ejemplo demostraremos, además de usar GetCurrentDirectory y SetCurrentDirectory, recurriremos al método Path.GetFullPath para trabajar con rutas relativas.

Archivo C# ManipulacionRutasRelativas.cs [Enlace alternativo][Enlace alternativo]:

Mostramos la ruta actual de trabajo en la línea 14. Luego, en la línea 15, usando Path.GetFullPath(string) obtenemos la ruta absoluta para el archivo ArchivoTexto.txt. Con la invocación 

Directory.SetCurrentDirectory(@"C:\etc");


(línea 20) establecemos como ruta de trabajo C:\etc. Nuevamente con 

Path.GetFullPath(string)


(línea 22) obtenemos la ruta absoluta para el archivo ArchivoTexto.txt.

Compilación:


  1. csc /target:exe ManipulacionRutasRelativas.cs

Ejecución assembly:


  1. .\ManipulacionRutasRelativas.exe

> Prueba de ejecución:
Ejecución assembly ManipulacionRutasRelativas.exe
Figura 2. Ejecución assembly ManipulacionRutasRelativas.exe.

5. Conclusiones

Hemos elaborado esta receta para comrender cómo trabajar con rutas relativas, y hemos concluido que resulta simple y directo con el uso de los métodos GetCurrentDirectory, SetCurrentDirectory, y Path.GetFullPath. Entender la manipulación de rutas relativas nos va a permitir trabajar con recursos de un proyecto sin necesidad de tener que especificar cadenas de caracteres excesivamente largas que referencien rutas absolutas.


En la próxima receta C# aprenderemos a crear un archivo temporal.

6. Glosario

  • Archivo
  • Directorio
  • Directorio de trabajo
  • Ruta
  • Ruta absoluta
  • Ruta relativa

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]: Directory Class (System.IO) - https://msdn.microsoft.com/en-us/library/System.IO.Directory(v=vs.110).aspx
[3]: Directory.GetCurrentDirectory Method (System.IO) - https://msdn.microsoft.com/en-us/library/system.io.directory.getcurrentdirectory(v=vs.110).aspx
[4]: Directory.SetCurrentDirectory Method (System.IO) - https://msdn.microsoft.com/en-us/library/system.io.directory.setcurrentdirectory(v=vs.110).aspx
[5]: Path.GetFullPath Method (System.IO) - https://msdn.microsoft.com/en-us/library/system.io.path.getfullpath(v=vs.110).aspx
[6]: Path Class (System.IO) - https://msdn.microsoft.com/en-us/library/System.IO.Path(v=vs.110).aspx


M

No hay comentarios:

Publicar un comentario

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