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!