Quiero crear un programa que convierta archivos. Me gustaría que el usuario pueda 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?
GetEntryAssembly
yGetExecutingAssembly
no es una gran sorpresa, también es obvia por el nombre de la función. Si hicieron lo mismo, ¿por qué debería haber dos funciones? :-)System.Reflection.Assembly.GetExecutingAssembly().Location
es el completo, si está probando desde la ventana InmediatoEsto le dará el directorio en ejecución de su aplicación. Esto incluso funciona para aplicaciones web. Luego puede llegar a su archivo.
fuente
Creé una aplicación de consola simple con el siguiente código:
Copié el ejecutable resultante en
C:\temp2
. Luego coloqué un acceso directo a ese ejecutableC:\temp3
y lo ejecuté (una vez desde el propio exe y otra desde el acceso directo). Dio las siguientes salidas en ambas ocasiones:Si bien estoy seguro de que debe haber alguna razón para explicar por qué hay cinco métodos diferentes que hacen exactamente lo mismo, ciertamente no sé qué es. Sin embargo, parecería que, en la mayoría de las circunstancias, usted es libre de elegir el que desee.
ACTUALIZACIÓN: Modifiqué las propiedades de acceso directo, cambiando el campo "Iniciar en:" a
C:\temp3
. Esto dio como resultado el siguiente resultado:... que demuestra al menos algunas de las distinciones entre los diferentes métodos.
fuente
Prueba esto:
System.Environment.CurrentDirectory
fuente
Environment.CurrentDirectory
se puede cambiar de varias maneras ... (configuración de shotrtcut, etc.)De
Path.GetDirectoryName
De
Application.ExecutablePath
fuente
Utilizar este,
Puedes usar esto también.
fuente
para uso .NET CORE
System.AppContext.BaseDirectory
(como reemplazo de
AppDomain.CurrentDomain.BaseDirectory
)fuente
1)
2)
3)
fuente
Environment.CurrentDirectory
se puede cambiar de varias maneras ... (configuración de shotrtcut, etc.)Úselo
Application.StartupPath
para obtener el mejor resultado imo.fuente
Si quieres la ruta exe puedes usar
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
fuente
Esto funciona mejor para mí, especialmente cuando utilizo la publicación de archivos únicos de dotnet core.
Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)
.fuente