Separar la ruta de un archivo de este.

Iniciado por SeniorX, 3 Julio 2006, 01:05 AM

0 Miembros y 1 Visitante están viendo este tema.

SeniorX

Eso :P... tengo un problema muy tonto, lo que pasa es que obtengo la ruta de un archivo mediante un openfiledialog, y el filename me da su ruta completa lo que yo quiero hacer es separar el archivo para que en una cadena me quede nombreArchivo y en el otro RutaDelArchivo. Se me ocurre hacer algo con un split, separando todos los \, pero no me gusta porque seguramente hay algo mas practico y porque en unix las rutas son con / :P.... Seguro que hay alguna propiedad, yo por mientras sigo mirando, ojalá alguien sepa.
try {
     live();
}
catch (ShitHappensException ex) {
MessageBox.Show(ex.Solution)
}

Precaución: La programacion puede producir adiccion

Robokop

#1
porque no intentas con instr para que te devuelva el numero de caracteres que hay antes de 7 y luego con mid la acortas
Module Module1

    Sub Main()
        Dim lugar As String = "Windows\system\nombre"
        Dim acortar As Integer

        acortar = (InStr(lugar, "\"))
        Console.WriteLine(acortar)
        Console.WriteLine(Mid(lugar, acortar))

        Console.ReadLine()


    End Sub

End Module


Explicacion : instr sirve para comparar una cadena con un caracter o con un conjuto de caracteres es decir palabras xDD  y este nos devuelve un numero que es la posicion donde empieza desde izquierda a derecha.
Mid sirve para cortar ,divir,mochar,separar etc.. lo que haces es separar la cadena en este caso el directorio por el valor retornado de instr.

SeniorX

Disculpa es en c# XD. Se me habia olvidado especificar, pero entendi la teoria, pero me gustaria saber si hay alguna manera mas practica.
Y otra pregunta: Como puedo obtener la ruta donde está el ejecutable de mi programa?
try {
     live();
}
catch (ShitHappensException ex) {
MessageBox.Show(ex.Solution)
}

Precaución: La programacion puede producir adiccion

MaLkAvIaN_NeT

Para ver la ruta donde corre tu programa en un textbox;

this.textBox1.Text=Application.StartupPath;

...con lo anterior yo pasé por el problema, y como dices tu la clase Split es tediosa supongamos que tengo la ruta:

this.openFileDialog1.ShowDialog();
         string Ruta=this.openFileDialog1.FileName;


.. bueno lo que hice yo para hacer una separación fue meter la cadena en un bucle de izquierda a derecha, y en el primer "\" que encontraba terminaba el bucle y obtenias lo restante que sería la ruta y lo que estuvo despues el nombre del archivo.

bueno esto si lo hize en vb.net puedes pasarlo a C#,, lo tengo por aqui:

For i As Integer = cadena.Length - 1 To 0 Step -1
                        If cadena.Substring(i, 1).ToLower = "\" Then
                            cadena = cadena.Substring(i + 1)
                        End If
           Next

a por las buenas ideas

SeniorX

Muchas gracias por la info :).

Con respecto a tu algoritmo, por lo que veo, si la ruta tiene muchos "\" habria problemas:
Ruta: c:\hola\este\es\mi\archivo.exe
por lo que entendi tu algoritmo pararia en c:\ y el nombre del archivo seria \hola\este\es\mi\archivo.exe.

A ver si se aparece alguien en c# que haya tenido el mismo problema, pero de todas maneras me ayuda ver las soluciones de los demás, aunque esten en otros lenguajes.
try {
     live();
}
catch (ShitHappensException ex) {
MessageBox.Show(ex.Solution)
}

Precaución: La programacion puede producir adiccion

MaLkAvIaN_NeT

acortar = (InStr(lugar, "\"))
Console.WriteLine(acortar)
Console.WriteLine(Mid(lugar, acortar))


El code que pone nuestro amigo Robokop funciona a la perfeción,,, pero si se hablara de un code netamente orientado a la filosofía del .NET no se tendría que usar funciones como Mid y otras; porque estarían al marjen de la potencia que nos ofrece el Net Framework.( esto si usaramos nuestras aplicaciones en interoperabilidad con otros lenguajes soportados).
Para los artilugios de cadena existen los métodos de la clase String como; Substring, Remove, padLEft, PadRight, entre otros.
Bueno pero si no se piensa en esos detalles que aveces son importantes se puede programar con programación estructurada porque vb.net es un lenguaje mixto

Salu2

a por las buenas ideas

MaLkAvIaN_NeT

CitarCon respecto a tu algoritmo, por lo que veo, si la ruta tiene muchos "\" habria problemas:
Ruta: c:\hola\este\es\mi\archivo.exe
por lo que entendi tu algoritmo pararia en c:\ y el nombre del archivo seria \hola\este\es\mi\archivo.exe.

por eso en el algoritmo que puse el for tiene step -1
osea no empieza a recorrer la cadena desde la izquierda, si no desde la derecha.
a por las buenas ideas

MaLkAvIaN_NeT

Bueno no sería tan diferente hacerlo en C#

for(int i = Ruta.Length ; i<=0; i--)

         
a por las buenas ideas

SeniorX

for (int i = ruta.Length; i <= 0; i--)
            {
                if (ruta.Substring(i, 1).ToLower = " \ ";
                ruta = ruta.Substring(i + 1);
            }

Tengo otro problema algo noob, que puedo hacer para que no me joda en "\", dice que es una secuencia de escape invalida :S
try {
     live();
}
catch (ShitHappensException ex) {
MessageBox.Show(ex.Solution)
}

Precaución: La programacion puede producir adiccion

LastDragon

#9
Que tal algo mas sencillo.

         System.Console.WriteLine (Environment.CurrentDirectory.ToString ());
         

checa la documentacion de Environment

ups no habia leido bien,, este viaje con tanto bache me dejo con las ideas revueltas.. veamos debe existir un metodo para eso....