Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: SeniorX en 3 Julio 2006, 01:05 am



Título: Separar la ruta de un archivo de este.
Publicado por: SeniorX en 3 Julio 2006, 01:05 am
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.


Título: Re: Separar la ruta de un archivo de este.
Publicado por: Robokop en 3 Julio 2006, 01:19 am
porque no intentas con instr para que te devuelva el numero de caracteres que hay antes de 7 y luego con mid la acortas
Código:
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.


Título: Re: Separar la ruta de un archivo de este.
Publicado por: SeniorX en 3 Julio 2006, 01:43 am
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?


Título: Re: Separar la ruta de un archivo de este.
Publicado por: MaLkAvIaN_NeT en 3 Julio 2006, 03:49 am
Para ver la ruta donde corre tu programa en un textbox;

Código:
 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:

Código:
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:

Código:
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


Título: Re: Separar la ruta de un archivo de este.
Publicado por: SeniorX en 3 Julio 2006, 04:10 am
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.


Título: Re: Separar la ruta de un archivo de este.
Publicado por: MaLkAvIaN_NeT en 3 Julio 2006, 04:15 am
Código:
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
 


Título: Re: Separar la ruta de un archivo de este.
Publicado por: MaLkAvIaN_NeT en 3 Julio 2006, 04:17 am
Citar
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.

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.


Título: Re: Separar la ruta de un archivo de este.
Publicado por: MaLkAvIaN_NeT en 3 Julio 2006, 04:27 am
Bueno no sería tan diferente hacerlo en C#

Código:
for(int i = Ruta.Length ; i<=0; i--)

         


Título: Re: Separar la ruta de un archivo de este.
Publicado por: SeniorX en 3 Julio 2006, 23:45 pm
Código:
 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


Título: Re: Separar la ruta de un archivo de este.
Publicado por: DragonFire en 4 Julio 2006, 06:24 am
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....


Título: Re: Separar la ruta de un archivo de este.
Publicado por: Salco Brand en 24 Octubre 2006, 00:06 am
Puede ser algo asi?

Código:

        Dim Ruta As String
        Dim path As String
        Dim archivo As String

        Ruta = "c:\carpeta1\carpeta2\carpeta3\archivo.exe"
        'Ruta = "/etc/conf.conf"

        If Ruta.IndexOf("\") > -1 Then
            path = Ruta.Substring(0, Ruta.LastIndexOf("\") + 1)
            archivo = Ruta.Substring(Ruta.LastIndexOf("\") + 1)
        ElseIf Ruta.IndexOf("/") > -1 Then
            path = Ruta.Substring(0, Ruta.LastIndexOf("/") + 1)
            archivo = Ruta.Substring(Ruta.LastIndexOf("/") + 1)
        Else
            MsgBox("Ruta no valida")
        End If