2011-08-11 25 views
5

¿Cuál es el mejor método para obtener la ruta desde la que se ejecuta el ejecutable C#?C# Ejecutable Directorio de ejecución

que necesito para utilizarlo para los archivos temporales, etc y actualmente estoy usando:

Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) 

Pero entonces tengo que hacer un:

.Replace("file:\\", string.Empty) 

ya que esto me da un camino tipo de URI (es decir, tiene archivo: \ al inicio) que no se puede usar con algunas otras partes de mi código.

Respuesta

23
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 
+0

Esta es la única manera confiable de obtener la ruta del ejecutable en cualquier proyecto de C# (winforms, wpf, console, etc.) y sin duda la mejor respuesta a la pregunta original. Pero, en este caso, suena como una carpeta específica de la aplicación en ApplicationData se debe utilizar. Me abstendría de utilizar el directorio temporal a menos que sea verdaderamente temporal (es decir, los archivos no se utilizarán durante más de unos segundos o durante un proceso específico). Borro mi carpeta temporal con regularidad. – wasatchwizard

+0

¿Por qué necesita "Path.GetDirectoryName()", la propiedad Location parece proporcionar la ruta completa ya. –

+1

@MikeK Location incluye el nombre del archivo pero solo se necesita el directorio (consulte el título de esta pregunta) ;-) –

1

Probar:

Application.StartupPath 

Debe devolver el camino sin el nombre del archivo ejecutable.

+1

'Application.StartupPath' solo está disponible para WinForms (es decir, haciendo referencia al ensamblado System.Windows.Forms). . [link] (http://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath (v = vs.110) .aspx) – wasatchwizard

+0

Sí, olvidé mencionarlo, @wasatchwizard , +1 a tu comentario. – Rolice

3

Probar con Environment.CurrentDirectory Esto devuelve la carpeta de su directorio actualmente en funcionamiento.

3

Para carpetas temporales etc. No debe utilizar el directorio de ejecución por razones de seguridad ... MS tiene algo incorporado para esto:

Puede utilizar ApplicationData (para usuarios móviles) o LocalApplicationData (por no -transmisiones de usuarios) o CommonApplicationData (para cosas no relacionadas con el usuario) desde Environment.SpecialFolder - cualquier cosa (archivos + carpetas) que cree dentro de esas carpetas ya está configurada con los permisos/derechos necesarios para el usuario que ejecuta su aplicación - nadie más (excepto tal vez Administrador) puede ir allí ... para hacerlo aún más seguro, puede cifrar los datos que pone allí ...

ver http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

0

cadena executableLocation = Path.GetDirectoryName (Assembly.GetExecutingAssembly(). Ubicación); string txtfile = Path.Combine (executableLocation, "ejemplo.txt");

1

Si el conjunto ha sido copiado en la sombra, entonces Assembly.Location apuntará a la copia oculta de la dll.

Si desea saber la ubicación del directorio de salida acumulación uso Assembly.CodeBase, es decir .:

Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath) 

Es útil si se desea acceder a otros recursos del directorio de la asamblea, por ejemplo, cuando se ejecuta serie de pruebas.

Cuestiones relacionadas