Obtener la ruta actual de la carpeta

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

Intenté System.Windows.Forms.Application.StartupPath pero parece ser la manera incorrecta.

¿Algunas ideas?

No debe usar Directory.GetCurrentDirectory() en su caso, ya que el directorio actual puede diferir de la carpeta de ejecución, especialmente cuando ejecuta el progtwig a través de un acceso directo.

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

Si bien mi enfoque sugerido le permite diferenciar entre el ensamblaje de ejecución, el ensamblaje de entrada o cualquier otro ensamblaje 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á la ejecución de un directorio de su aplicación. Esto incluso funciona para aplicaciones web. Luego puede alcanzar su archivo.

Prueba esto:

System.Environment.CurrentDirectory

 string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath); 

De Path.GetDirectoryName

Devuelve la información del directorio para la cadena de ruta de acceso especificada.

Desde Application.ExecutablePath

Obtiene la ruta del archivo ejecutable que inició la aplicación, incluido el nombre del ejecutable.

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 a C:\temp2 . Luego coloqué un acceso directo a ese ejecutable en C:\temp3 , y lo ejecuté (una vez desde el propio exe, y una desde el atajo). 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 caótica para explicar por qué hay cinco métodos diferentes que hacen prácticamente lo mismo, ciertamente no sé de qué se trata. Sin embargo, parece que en la mayoría de las circunstancias, usted es libre de elegir el que le apetezca.

ACTUALIZACIÓN: modifiqué las propiedades del acceso directo, cambiando el campo “Comenzar en:” a C:\temp3 . Esto dio como resultado el siguiente resultado:

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

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

Utilizar esta,

 var currentDirectory = System.IO.Directory.GetCurrentDirectory(); 

Puedes usar esto también.

 var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 

1.

 Directory.GetCurrentDirectory(); 

2.

 Thread.GetDomain().BaseDirectory 

3.

 Environment.CurrentDirectory 

Use Application.StartupPath para obtener el mejor resultado imo.