2010-09-30 24 views
140

¿Hay algo incorporado en System.IO.Path que me dé solo el camino de archivo?Obtener la ruta completa sin el nombre de archivo de la ruta que incluye el nombre de archivo

Por ejemplo, si tengo una string

@ "c: \ servidor web \ Public \ \ MyCompany configuraciones \ promo.xml",

¿Hay algún método que le dará BCL me

"C: \ servidor web \ public \ \ MyCompany configuraciones \"?

+5

posible duplicado de [¿Cómo consigo el directorio de ruta completa de un archivo?] (Http://stackoverflow.com/questions/674479/how-do-i-get-the- directory-from-a-files-full-path) – bluish

+0

FWIW: "Me he rendido" en el manejo de "rutas" de Path y utilizamos nuestros propios métodos con mejores expectativas y uniformidad con UNC (intente utilizar GetDirectoryName en un Trayectoria de UNC) y convenciones (por ej., Rastreando /). – user2864740

Respuesta

175

Path.GetDirectoryName() ... pero hay que saber que el camino está de paso a sí contiene un nombre de archivo; simplemente elimina el último bit de la ruta, ya sea un nombre de archivo o un nombre de directorio (en realidad no tiene idea de cuál).

Se podía validar primero probando File.Exists() y/o Directory.Exists() en su camino para ver si necesita llamar Path.GetDirectoryName

+2

No es necesario llamar a 'File.Exists()'. De hecho, es bastante contraproducente en el caso donde su razón para encontrar el nombre del directorio es crearlo si no existe. –

+2

Su ejemplo indica explícitamente una ruta con un nombre de archivo. Si ese es el patrón de las rutas que está probando, y si esas rutas representan archivos existentes, la comprobación de File.Exists() seguramente sería útil, ¿no estarías de acuerdo? Debido a que la situación podría ser diferente, por supuesto, solo estaba sugiriendo que 'podría' usar los métodos existentes en el archivo y/o directorio; obviamente, como apropiado para su situación. –

+0

Sí, una ruta con un nombre de archivo. No hay nada que indique que existe un archivo, ya que los nombres de los archivos son lo primero. –

53
Console.WriteLine(Path.GetDirectoryName(@"C:\hello\my\dear\world.hm")); 
+0

Este es el mejor. Recuerde 'using System.IO;' para utilizar los métodos de ruta –

45

Path.GetDirectoryName() devuelve el nombre del directorio, así que para lo que quiere (con la posterior inversa carácter solidus) puede llamar al Path.GetDirectoryName(filePath) + Path.DirectorySeparatorChar.

+6

+1 The Path.DirectorySeparatorChar fue útil – mack

4

He utilizado este y funciona así:

string[] filePaths = Directory.GetFiles(Path.GetDirectoryName(dialog.FileName)); 

foreach (string file in filePaths) 
{ 
    if (comboBox1.SelectedItem.ToString() == "") 
    { 
     if (file.Contains("c")) 
     { 
      comboBox2.Items.Add(Path.GetFileName(file)); 
     } 
    } 
} 
4

Uso 'GetParent()' como se muestra, funciona muy bien. Agregue la verificación de errores como sea necesario.

var fn = openFileDialogSapTable.FileName; 
var currentPath = Path.GetFullPath(fn); 
currentPath = Directory.GetParent(currentPath).FullName; 
0
string fileAndPath = @"c:\webserver\public\myCompany\configs\promo.xml"; 

    string currentDirectory = Path.GetDirectoryName(fileAndPath); 

    string fullPathOnly = Path.GetFullPath(currentDirectory); 
+2

Proporcione información sobre cómo el código anterior responde la pregunta para mejorar esta respuesta. –

Cuestiones relacionadas