Obtener la ruta de la carpeta actual

Resuelto user2214609 asked hace 11 años • 13 respuestas

Quiero crear un programa que convierta archivos. Me gustaría que el usuario pudiera colocar el archivo ejecutable en cualquier directorio, y al ejecutar ese programa (haciendo doble clic en el .exe) quiero que el programa procese todos los archivos dentro de la carpeta actual donde existe el archivo exe . ¿Cómo puede el programa determinar la ruta en la que se está ejecutando actualmente?

Lo intenté System.Windows.Forms.Application.StartupPathpero parece ser el camino equivocado.

¿Algunas ideas?

user2214609 avatar Mar 27 '13 14:03 user2214609
Aceptado

No deberías usarlo Directory.GetCurrentDirectory()en tu caso, ya que el directorio actual puede diferir de la carpeta de ejecución, especialmente cuando ejecutas el programa a través de un acceso directo.

Es mejor usarlo Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);para su propósito. Esto devuelve el nombre de la ruta donde reside el ensamblado que se está ejecutando actualmente.

Si bien mi enfoque sugerido le permite diferenciar entre el conjunto de ejecución, el conjunto de entrada o cualquier otro conjunto cargado, como dijo Soner Gönül en su respuesta,

System.IO.Path.GetDirectoryName(Application.ExecutablePath);

también puede ser suficiente. Esto sería igual a

System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
Thorsten Dittmar avatar Mar 27 '2013 07:03 Thorsten Dittmar
System.AppDomain.CurrentDomain.BaseDirectory

Esto le dará el directorio de ejecución de su aplicación. Esto funciona incluso para aplicaciones web. Luego podrá acceder a su archivo.

hakan avatar May 07 '2014 09:05 hakan

Creé una aplicación de consola simple con el siguiente código:

Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory);
Console.WriteLine(System.Environment.CurrentDirectory);
Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
Console.WriteLine(Environment.CurrentDirectory);

Copié el ejecutable resultante en C:\temp2. Luego coloqué un acceso directo a ese ejecutable en C:\temp3y lo ejecuté (una vez desde el propio exe y otra desde el acceso directo). Dio los siguientes resultados en ambas ocasiones:

C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2

Si bien estoy seguro de que debe haber alguna razón disparatada para explicar por qué hay cinco métodos diferentes que hacen prácticamente exactamente lo mismo, ciertamente no sé cuál es. Sin embargo, parece que, en la mayoría de las circunstancias, eres libre de elegir el que prefieras.

ACTUALIZACIÓN: Modifiqué las propiedades del acceso directo, cambiando el campo "Iniciar en:" a C:\temp3. Esto resultó en el siguiente resultado:

C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3

...lo que demuestra al menos algunas de las distinciones entre los diferentes métodos.

kmote avatar Sep 01 '2015 19:09 kmote

Prueba esto:

System.Environment.CurrentDirectory

Hossein Narimani Rad avatar Mar 27 '2013 07:03 Hossein Narimani Rad