Obtener la ruta de la carpeta actual
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.StartupPath
pero parece ser el camino equivocado.
¿Algunas ideas?
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);
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.
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:\temp3
y 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.
Prueba esto:
System.Environment.CurrentDirectory