Acerca de:

Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)

miércoles, 9 de septiembre de 2009

Conversión de rutas en formato URI a formato del sistema operativo.

Ya he hablado de este problema en http://toyscaos.tripod.com/hist_csharp.html

La clase "Process" no tiene problemas con el formato URI, pero hay otros casos en que es necesario convertir este tipo de rutas a archivos en sus equivalentes "normales" (como al cargar una imagen en un picture box).

En VB se puede usar: 
path = "..\some file" 

Donde "path" es un dato de tipo string que almacena la ruta relativa a nuestra aplicación, algo necesario cuando queremos cargar algo ubicado en su misma carpeta, cualquiera que esta sea. Pero esta forma de declarar rutas relativas tiende a generar errores. Una manera más segura, es:

C#: 
path = System.IO.Path.GetDirectoryName
(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
path = string.Concat(path, "\\some file");
 
VB:
path = System.IO.Path.GetDirectoryName_
(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
path = String.Concat(path, "\some file")



Pero esto nos da las rutas en formato URI. La forma de convertir a formato "normal" (eliminar la cadena "file://" que tiene al comienzo) es:

C#:

string path;

  path = System.IO.Path.GetDirectoryName
(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
  path = string.Concat(path, "\\some file");

  char[] charBuf = path.ToCharArray();
  char[] charbuf2 = new char[path.Length - 6];

  for (int i = 6; i < path.Length; i++)
  charbuf2[i - 6] = charBuf[i];

  string ruta = "";
  ruta = new string(charbuf2);



VB:

 Dim path As String
 Dim i As Integer
 Dim charbuf As String

  path = System.IO.Path.GetDirectoryName_
(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
  path = String.Concat(path, "\some file")

  charbuf = ""

  For i = 7 To path.Length
  charbuf = String.Concat(charbuf, path.Chars(i - 1))
  Next

  ruta = charbuf

 
Happy Coding!