¿Cómo obtengo el directorio de la ruta completa de un archivo?


527

¿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.

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

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


3
¿No debería ser un literal de cadena? @"C:\MyDirectory\MyFile.bat"
Edgar

3
¿Alguien quiere proteger esta pregunta que tiene los derechos para hacerlo? 11 respuestas similares con las últimas de 2017 ..
Boern

Respuestas:


838

Si definitivamente tienes un camino absoluto, úsalo Path.GetDirectoryName(path).

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

Tenga en cuenta que Pathy FileInfoambos se encuentran en el espacio de nombres System.IO.


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

1
Puede usar DirectoryName en lugar de Directory.FullPath, ¿no?
Steven Robbins

1
Estaba probando contra recibir un nombre relativo. No había visto que el camino sería absoluto. Ahora tengo ambas versiones :)
Jon Skeet

¿Usas snippy para verificar eso? ;)
shahkalpesh

1
@UlyssesAlves: Creo que new FileInfo(path).Directory.FullNamedebería funcionar en cualquier caso.
Jon Skeet



12

Puede usar System.IO.Path.GetDirectory(filename), o convertir la ruta en a FileInfo, y usar FileInfo.Directory.

Si está haciendo otras cosas con el camino, FileInfopuede tener ventajas.


1
no existe el método 'GetDirectory en la clase de ruta; debes haber querido decir 'GetDirectoryName
BillW

12

Use el código mencionado a continuación para obtener la ruta de la carpeta

Path.GetDirectoryName(filename);

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



5

Si está trabajando con un FileInfoobjeto, entonces hay una manera fácil de extraer una stringrepresentación de la ruta completa del directorio a través de la DirectoryNamepropiedad.

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

Obtiene una cadena que representa la ruta completa del directorio.

Uso de la muestra:

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

Enlace a la documentación de MSDN .


5

Puede obtener la ruta de aplicación actual usando:

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

¡Buena suerte!


0

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));

0

Puede usar Path.GetFullPathpara la mayoría de los casos. Pero si desea obtener la ruta también en el caso de que el nombre del archivo esté relativamente ubicado, puede usar el siguiente método genérico:

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

Por ejemplo:

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

GetPath("Filename.txt")volver current working directorycomo"C:\Temp\"


0

En mi caso, necesitaba encontrar el nombre del directorio de una ruta completa (de un directorio), así que simplemente hice:

var dirName = path.Split('\\').Last();

1
El OP necesita "C:\MyDirectory"y no MyDirectory. El consejo de usar métodos de manipulación de cadenas es arriesgado, hay muchas trampas, más bien use Pathmétodos dedicados .
Sinatr

-1

Path.GetDirectoryName (Context.Parameters ["assemblypath"])


Path.GetDirectoryNamese menciona en muchas otras respuestas (incluyendo respuesta aceptada)
barbsan

ahha? ¿¿Entonces?? ¿hay algún punto por venir?
Ami Vaknin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.