Obtener el nombre de la carpeta de la ruta completa del archivo

116

¿Cómo obtengo el nombre de la carpeta de la ruta completa de la aplicación?

Esta es la ruta del archivo a continuación,

c:\projects\root\wsdlproj\devlop\beta2\text

Aquí "texto" es el nombre de la carpeta.

¿Cómo puedo obtener ese nombre de carpeta de esta ruta?

vasmay
fuente

Respuestas:

205

Ver DirectoryInfo.Name :

string dirName = new DirectoryInfo(@"c:\projects\roott\wsdlproj\devlop\beta2\text").Name;
Alex Pacurar
fuente
¿No se requiere que la carpeta existe realmente en el sistema de archivos (el nombre de la carpeta sería aún ser "texto" para esa ruta completa del archivo si la carpeta "c: \ proyectos \ root \ wsdlproj \ devlop \ beta 2 \ texto" no ( actualmente) existen en el sistema de archivos)?
Peter Mortensen
@PeterMortensen, no. Acabo de probar esto y el método devuelve el nombre de la carpeta de nivel más bajo de la cadena, incluso si la ruta de la carpeta no existe.
vbguyny
1
Gracias, gran respuesta. Pero estoy un poco desconcertado de que System.IO.Directory no admita tal operación.
anhoppe
1
@anhoppe - estoy de acuerdo. Otra opción que vi es Path.GetDirectoryName msdn.microsoft.com/en-us/library/… , pero no podré probarla hasta mañana.
Don Cheadle
30

Creo que desea obtener el nombre de la carpeta principal de la ruta del archivo. Es fácil de conseguir. Una forma es crear un FileInfoobjeto de tipo y usar su Directorypropiedad.

Ejemplo:

FileInfo fInfo = new FileInfo("c:\projects\roott\wsdlproj\devlop\beta2\text\abc.txt");

String dirName = fInfo.Directory.Name;
Shekhar
fuente
16

Prueba esto

var myFolderName = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
var result = Path.GetFileName(myFolderName);
Øyvind Bråthen
fuente
si tiene un nombre de archivo en una cadena, también devuelve el nombre de archivo
swissben
1
En este caso, el texto es el nombre del archivo (sin extensión). Pensé que eso era lo que buscaba el OP. Si se trata de una carpeta o un nombre de archivo, en realidad no importa. Si la cadena no contiene el nombre del archivo, este código le dará lo que busca.
Øyvind Bråthen
4
A menos que los caminos terminen con un \ como este:@"c:\projects\roott\wsdlproj\devlop\beta2\text\"
Kristof Claes
1
esto no funciona para una carpeta. Recibo una cadena en blanco. Debe haber un archivo presente
BraveNewMath
3
Esto funciona bien si la ruta de la carpeta no contiene una barra invertida al final (como, por ejemplo, una ruta de carpeta devuelta por Path.GetDirectoryName () ). Sin embargo, el nombre de esa función, GetFileName (), es un poco engañoso.
Peter Mortensen
9

Podrías usar esto:

string path = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
string lastDirectory = path.Split(new char[] { System.IO.Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Last();
Kristof Claes
fuente
¿Qué pasa si la ruta se ve así: @ "c: \ proyectos \ roott \ wsdlproj \ devlop \ beta2 \ text \", entonces con un DirectorySeparatorChar adicional
Alex Pacurar
1
@Alex: modifiqué mi código para que funcione también con ese tipo de rutas. StringSplitOptions.RemoveEmptyEntriesHace el truco.
Kristof Claes
Según msdn.microsoft.com/en-us/library/… , FileInfo puede generar una excepción si no se otorga el permiso requerido.
Daniel B
5

Simplemente use Path.GetFileName

Aquí: extraiga el nombre de la carpeta de la ruta completa de una carpeta:

string folderName = Path.GetFileName(@"c:\projects\root\wsdlproj\devlop\beta2\text");//Return "text"

Aquí hay algo adicional: extraiga el nombre de la carpeta de la ruta completa de un archivo:

string folderName = Path.GetFileName(Path.GetDirectoryName(@"c:\projects\root\wsdlproj\devlop\beta2\text\GTA.exe"));//Return "text"
123iamking
fuente
3

Supuse que no había otra forma que ir al sistema de archivos para averiguar si text.txt es un directorio o simplemente un archivo. Si quieres algo simple, tal vez puedas usar:

s.Substring(s.LastIndexOf(@"\"));
Zuoanqh
fuente
1
Para evitar una barra al principio de la cadena: s.Substring (s.LastIndexOf (@ "\") + 1);
David Yates
2

En este caso, el archivo que desea obtener se almacena en la variable strpath:

string strPath = Server.MapPath(Request.ApplicationPath) + "/contents/member/" + strFileName;
Krishna
fuente
2

Aquí hay un método alternativo que funcionó para mí sin tener que crear un objeto DirectoryInfo. El punto clave es que GetFileName()funciona cuando no hay una barra al final en la ruta.

var name = Path.GetFileName(path.TrimEnd(Path.DirectorySeparatorChar));

Ejemplo:

var list = Directory.EnumerateDirectories(path, "*")
        .Select(p => new
        {
            id = "id_" + p.GetHashCode().ToString("x"),
            text = Path.GetFileName(p.TrimEnd(Path.DirectorySeparatorChar)),
            icon = "fa fa-folder",
            children = true
        })
        .Distinct()
        .OrderBy(p => p.text);
Roberto
fuente
1

Esto también se puede hacer así;

var directoryName = System.IO.Path.GetFileName(@"c:\projects\roott\wsdlproj\devlop\beta2\text");
Steve Cooper
fuente
esto devolverá una cadena vacía
disklosr
@disklosr - recién probado con ScriptCs y devuelve 'texto'
Steve Cooper
2
Esto funciona bien si la ruta de la carpeta no contiene una barra invertida al final (como, por ejemplo, una ruta de carpeta devuelta por Path.GetDirectoryName () ). Sin embargo, el nombre de esa función, GetFileName (), es un poco engañoso.
Peter Mortensen
0

Basado en respuestas anteriores (pero corregido)

using static System.IO.Path;

var dir = GetFileName(path?.TrimEnd(DirectorySeparatorChar, AltDirectorySeparatorChar));

Explicación de GetFileNamede fuente .NET :

Devuelve el nombre y las partes de extensión de la ruta dada. La cadena resultante contiene los caracteres de la ruta que siguen a la última barra invertida ("\"), barra inclinada ("/") o dos puntos (":") en la ruta. La cadena resultante es la ruta completa si la ruta no contiene barra invertida después de eliminar las barras diagonales, la barra inclinada o los dos puntos. La cadena resultante es nula si la ruta es nula.

marsze
fuente
-3
Path.GetDirectoryName(@"c:\projects\roott\wsdlproj\devlop\beta2\text");

MSDN: Método Path.GetDirectoryName

swissben
fuente
11
Esto volverá c:\projects\roott\wsdlproj\devlop\beta2, y eso no es lo que buscaba el OP.
Øyvind Bråthen