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

Incluso Mien
fuente
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.

Jon Skeet
fuente
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
60
System.IO.Path.GetDirectoryName(filename)
Cherian
fuente
22
Path.GetDirectoryName(filename);
Grzenio
fuente
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.

Reed Copsey
fuente
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

thejustv
fuente
10

Puede usar Path.GetDirectoryNamey simplemente pasar el nombre del archivo.

Enlace MSDN

Brandon
fuente
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 .

Derek W
fuente
5

Puede obtener la ruta de aplicación actual usando:

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

¡Buena suerte!

David Castro
fuente
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));
Umut D.
fuente
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\"

Minh Nguyen
fuente
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();
Amir No-Family
fuente
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"])

Ami Vaknin
fuente
Path.GetDirectoryNamese menciona en muchas otras respuestas (incluyendo respuesta aceptada)
barbsan
ahha? ¿¿Entonces?? ¿hay algún punto por venir?
Ami Vaknin