2009-03-23 11 views
385

¿Cuál es la forma más sencilla de obtener el directorio en el que se encuentra un archivo? Estoy usando esto para establecer un directorio de trabajo.¿Cómo obtengo el directorio de la ruta completa de un archivo?

string filename = @"C:\MyDirectory\MyFile.bat"; 

En este ejemplo, debería obtener "C: \ MyDirectory".

+3

¿No debería ser una cadena literal? '@" C: \ MyDirectory \ MyFile.bat "' – Edgar

Respuesta

627

Si definitivamente tiene una ruta absoluta, use Path.GetDirectoryName(path).

Si solo puede obtener un nombre relativo, use new FileInfo(path).Directory.FullName.

Tenga en cuenta que Path y FileInfo se encuentran en el espacio de nombres System.IO.

+0

De hecho, ¿pero hay un método llamado GetDirectory? ¿No es GetDirectoryName? – Brandon

+1

Puede usar DirectoryName en lugar de Directory.FullPath, ¿no es así? –

+1

Estaba a prueba en contra de recibir un nombre relativo. No había visto que el camino sería absoluto. Ahora tengo ambas versiones :) –

19
Path.GetDirectoryName(filename); 
9

Puede utilizar Path.GetDirectoryName y sólo tiene que pasar en el nombre de archivo.

MSDN Link

42
System.IO.Path.GetDirectoryName(filename) 
12

Usted puede utilizar System.IO.Path.GetDirectory(filename), o convertir el camino en una FileInfo, y utilizar FileInfo.Directory.

Si está haciendo otras cosas con la ruta, el FileInfo puede tener ventajas.

+1

no hay 'método GetDirectory en la clase Path; debes haber querido decir 'GetDirectoryName' – BillW

4

Si está trabajando con un objeto FileInfo, entonces hay una manera fácil de extraer una representación string de la ruta completa del directorio a través de la propiedad DirectoryName.

Descripción de la FileInfo.DirectoryName la propiedad a través de MSDN:

Obtiene una cadena que representa ruta completa del directorio.

Ejemplo de uso:

string filename = @"C:\MyDirectory\MyFile.bat"; 
FileInfo fileInfo = new FileInfo(filename); 
string directoryFullPath = fileInfo.DirectoryName; // contains "C:\MyDirectory" 

Enlace a la MSDN documentation.

1

Primero, debe usar el espacio de nombres System.IO. Entonces;

string filename = @"C:\MyDirectory\MyFile.bat"; 
string newPath = Path.GetFullPath(fileName); 

o

string newPath = Path.GetFullPath(openFileDialog1.FileName)); 
6

Uso código de abajo mencionada para obtener la ruta de la carpeta

Path.GetDirectoryName(filename); 

Esto devolverá "C: \ MiDirectorio" en su caso

4

Usted puede obtener la ruta de aplicación actual usando:

string AssemblyPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString(); 

¡Buena suerte!

0

Puede usar Path.GetFullPath para la mayoría de las maletas. Pero si desea obtener la ruta también en el caso del nombre de archivo es relativamente situada a continuación, puede utilizar el método genérico a continuación:

string GetPath(string filePath) 
{ 
    return Path.GetDirectoryName(Path.GetFullPath(filePath)) 
} 

Por ejemplo:

GetPath("C:\Temp\Filename.txt") retorno "C:\Temp\"

GetPath("Filename.txt") return current working directory como "C:\Temp\"

0

Solo en caso de que alguien más lo necesite, lo que utilicé para mi ruta relativa fue:

string rootPath = "MyRootDir/MyFolder1/MyFolder2/myFile.pdf"; 
while (!string.IsNullOrWhiteSpace(Path.GetDirectoryName(rootPath))) 
{ 
    rootPath = Path.GetDirectoryName(rootPath); 
} 
Console.WriteLine(rootPath); //Will print: "MyRootDir" 
Cuestiones relacionadas