none
¿Cómo puedo obtener la primera carpeta de una ruta? Explico. RRS feed

  • Pregunta

  • Suponiendo que tengo:

    cRuta = "C:\Primera carpeta\Segunda Carpeta\Archivo.txt"

    cRutaSinArchivo = Path.GetDirectoryName(cRuta)

    Hasta allí obtengo:

    "C:\Primera carpeta\Segunda Carpeta"

    De esa ruta deseo obtener:

    "C:\Primera Carpeta"

    De manera que funcione para cualquier cantidad de subcarpetas. Que siempre retorne la primera o simplemente la unidad de disco en caso no haya subcarpetas, o sea "C:\"


    No estoy muy seguro, pero creo que con uno de los métodos para manipular rutas se puede avanzar de tramo en tramo por cada subcarpeta contenida en la cadena. Recuerdo haber hecho algo similar alguna vez, pero no me acuerdo cómo.



    lunes, 15 de marzo de 2021 7:36

Respuestas

  • Hola James,

    Te dejo este link con la documentación oficial del GetDirectoryName donde el primer ejemplo te puede ayudar a lo que deseas implementar.

    string filePath = @"C:\MyDir\MySubDir\myfile.ext";
    string directoryName;
    int i = 0;
    
    while (filePath != null)
    {
        directoryName = Path.GetDirectoryName(filePath);
        Console.WriteLine("GetDirectoryName('{0}') returns '{1}'",
            filePath, directoryName);
        filePath = directoryName;
        if (i == 1)
        {
            filePath = directoryName + @"\";  // this will preserve the previous path
        }
        i++;
    }
    /*
    This code produces the following output:
    
    GetDirectoryName('C:\MyDir\MySubDir\myfile.ext') returns 'C:\MyDir\MySubDir'
    GetDirectoryName('C:\MyDir\MySubDir') returns 'C:\MyDir'
    GetDirectoryName('C:\MyDir\') returns 'C:\MyDir'
    GetDirectoryName('C:\MyDir') returns 'C:\'
    GetDirectoryName('C:\') returns ''
    */

    Saludos,

    Eric Ruiz

    • Marcado como respuesta James2016-2 lunes, 15 de marzo de 2021 15:23
    lunes, 15 de marzo de 2021 14:47
    Moderador

Todas las respuestas

  • Hola James,

    Te dejo este link con la documentación oficial del GetDirectoryName donde el primer ejemplo te puede ayudar a lo que deseas implementar.

    string filePath = @"C:\MyDir\MySubDir\myfile.ext";
    string directoryName;
    int i = 0;
    
    while (filePath != null)
    {
        directoryName = Path.GetDirectoryName(filePath);
        Console.WriteLine("GetDirectoryName('{0}') returns '{1}'",
            filePath, directoryName);
        filePath = directoryName;
        if (i == 1)
        {
            filePath = directoryName + @"\";  // this will preserve the previous path
        }
        i++;
    }
    /*
    This code produces the following output:
    
    GetDirectoryName('C:\MyDir\MySubDir\myfile.ext') returns 'C:\MyDir\MySubDir'
    GetDirectoryName('C:\MyDir\MySubDir') returns 'C:\MyDir'
    GetDirectoryName('C:\MyDir\') returns 'C:\MyDir'
    GetDirectoryName('C:\MyDir') returns 'C:\'
    GetDirectoryName('C:\') returns ''
    */

    Saludos,

    Eric Ruiz

    • Marcado como respuesta James2016-2 lunes, 15 de marzo de 2021 15:23
    lunes, 15 de marzo de 2021 14:47
    Moderador
    • Hola, me refería a GetParent(). El código que pones es también una buena alternativa, gracias.
    lunes, 15 de marzo de 2021 15:23