2011-03-08 22 views

Respuesta

147

Ver DirectoryInfo.Name:

string dirName = new DirectoryInfo(@"c:\projects\roott\wsdlproj\devlop\beta2\text").Name; 
+0

Gracias alex .... esto es lo que quiero ... – vasmay

+0

Excelente gracias mucho –

+0

¿Esto no requiere que la carpeta realmente exista en el sistema de archivos (el nombre de la carpeta * todavía * sería "texto" para esa ruta de archivo completa si la carpeta "c: \ projects \ root \ wsdlproj \ devlop \ beta2 \ text "no existe (actualmente) en el sistema de archivos)? –

12

probar este

var myFolderName = @"c:\projects\roott\wsdlproj\devlop\beta2\text"; 
var result = Path.GetFileName(myFolderName); 
+0

si tiene un nombre de archivo en la cadena, se devuelve el nombre de archivo demasiado – swissben

+1

En este caso, el texto es el nombre del archivo (extensión-menos). Pensé que eso era lo que buscaba el OP. Si es 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. –

+2

A menos que las rutas finalicen con un \ como este: '@" c: \ projects \ roott \ wsdlproj \ devlop \ beta2 \ text \ "' –

7

Usted podría utilizar esto:

string path = @"c:\projects\roott\wsdlproj\devlop\beta2\text"; 
string lastDirectory = path.Split(new char[] { System.IO.Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Last(); 
+0

¿Qué pasa si la ruta se ve así: @ "c: \ projects \ roott \ wsdlproj \ devlop \ beta2 \ text \", por lo que con un DirectorySeparatorChar adicional –

+1

@Alex - He modificado mi código para que funcione con ese tipo de caminos también. 'StringSplitOptions.RemoveEmptyEntries' hace el truco. –

+0

Según http://msdn.microsoft.com/en-us/library/system.io.fileinfo.fileinfo.aspx, FileInfo puede lanzar una excepción si no se proporciona el permiso requerido. –

21

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 objeto tipo FileInfo y usar su propiedad Directory.

Ejemplo:

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

String dirName = fInfo.Directory.Name; 
-2
Path.GetDirectoryName(@"c:\projects\roott\wsdlproj\devlop\beta2\text"); 

MSDN: Path.GetDirectoryName-Methode

+10

Esto devolverá 'c: \ projects \ roott \ wsdlproj \ devlop \ beta2', y eso no es lo que el OP estaba buscando. –

2

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

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

Esto también se puede hacer al igual que;

var directoryName = System.IO.Path.GetFileName(@"c:\projects\roott\wsdlproj\devlop\beta2\text"); 
+0

este devolverá una cadena vacía – disklosr

+0

@disklosr - sólo probado con ScriptCs y vuelve 'texto' –

+0

Esto funciona bien si la ruta de la carpeta no contiene una barra diagonal inversa (como por ejemplo una ruta de carpeta regresó de [Path.GetDirectoryName ()] (https://msdn.microsoft.com/en-us/system.io.path.getdirectoryname.aspx)). Sin embargo, el nombre de esa función, GetFileName(), es un poco engañoso. –

1

que pensé que no hay manera, excepto entrar en el sistema de archivos para averiguar si text.txt es un directorio o simplemente un archivo. Si quería algo sencillo, tal vez lo que puede utilizar:

s.Substring(s.LastIndexOf(@"\")); 
+0

Para evitar una barra en la parte frontal de la cadena: s.Substring (s.LastIndexOf (@ "\") + 1); –

0

Aquí es un método alternativo que trabajó para mí sin tener que crear un objeto DirectoryInfo. El punto clave es que GetFileName() funciona cuando no hay una barra 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); 
Cuestiones relacionadas