¿Debo usar AppDomain.CurrentDomain.BaseDirectory o System.Environment.CurrentDirectory?


86

Tengo dos archivos exe en la misma carpeta, puedo ejecutar exe2 desde un botón en exe1. Hoy estaba observando a un cliente durante una sesión remota (servicios de terminal) y exe2 no pudo ejecutar el error "Archivo no encontrado", pero exe1 estaba en el mismo directorio cuando lo verificamos. Entonces, ¿debería usar AppDomain.CurrentDomain.BaseDirectory o System.Environment.CurrentDirectory ?

Gracias


@Jade M ¿Cómo estás ejecutando tu exe1 en la terminal?
Sra. Sonia

Quiero sumar mis dos centavos diciendo que string.GetFullPath(path)usa en Environment.CurrentDirectorylugar de CurrentDomain.BaseDirectory, para mi sorpresa.
JBSnorro

Respuestas:


185

Si desea buscar archivos en el mismo directorio que su aplicación, AppDomain.CurrentDomain.BaseDirectoryes la opción correcta.

Environment.CurrentDirectoryes un valor que puede cambiar y cambiará a lo largo de la ejecución de su aplicación. Por ejemplo, usando parámetros predeterminados, OpenFileDialog en WinForms cambiará este valor al directorio donde se seleccionó el archivo.


Usé button1 para mostrar OpenFileDialog, luego button2 para mostrar Environment.CurrentDirectory, pero sigo mostrando la carpeta de depuración, ¿por qué?
Lei Yang

18

AppDomain.CurrentDomain.BaseDirectorydevuelve el directorio desde donde se cargó el dominio de la aplicación actual.
System.Environment.CurrentDirectorydevuelve el directorio del sistema actual.
En tu caso AppDomain.CurrentDomain.BaseDirectoryes la mejor solución.


1
Para ser claros, System.Environment.CurrentDirectory devuelve el directorio de trabajo actual (específico del proceso) .
Oskar Berggren

14

Deberías usar AppDomain.CurrentDomain.BaseDirectory.

Por ejemplo, en una aplicación de servicios de Windows:

System.Environment.CurrentDirectorydevolverá C: \ Windows \ system32

Mientras

AppDomain.CurrentDomain.BaseDirectory devolverá [ubicación de Application.exe]

Otro factor importante a tener en cuenta es que AppDomain.CurrentDomain.BaseDirectoryes una propiedad de solo lectura, mientras que Environment.CurrentDirectorypuede ser otra cosa si es necesario:

// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;   

6

Según tengo entendido, deberías usar BaseDirectory. CurrentDirectorypodría cambiar a lo largo de la ejecución del programa.



2

Normalmente uso algo como:

            string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
            AppPath = AppPath.Replace("file:\\", "");

2

También he pasado por esto hace unos días, ya que estaba usando

Environment.CurrentDirectory

ya que me estaba dando un problema en el servidor de producción pero funcionaba bien con mi servidor local,

Entonces, lo intenté con

System.AppDomain.CurrentDomain.BaseDirectory;

Y funcionó para mí tanto en el Medio Ambiente.

Entonces, como todos ellos han dicho, siempre deberíamos ir con

System.AppDomain.CurrentDomain.BaseDirectory;

mientras busca la ruta en el directorio del dominio actual.

echa un vistazo para más información

No se pudo encontrar una parte del error de ruta en el servidor

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.