c# - relativo - Obtener la ruta actual de la carpeta
path dinamico c# (8)
1.
Directory.GetCurrentDirectory();
2.
Thread.GetDomain().BaseDirectory
3.
Environment.CurrentDirectory
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?
Intenté System.Windows.Forms.Application.StartupPath
pero parece ser la manera incorrecta.
¿Algunas ideas?
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.
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 programa 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);
Prueba esto:
Use Application.StartupPath
para obtener el mejor resultado imo.
Utilizar esta,
var currentDirectory = System.IO.Directory.GetCurrentDirectory();
Puedes usar esto también.
var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().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.
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
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.