2012-06-12 7 views
41

konsol uygulamasının yürütme diziniBen aşağıdaki kodu kullanarak konsol uygulaması dizini almaya çalıştı

Assembly.GetExecutingAssembly().Location 

olsun ama Oturuyor araya nerede bu bana verir nasıl. Bu, uygulamayı gerçekleştirdiğim yerden farklı olabilir.

Konsol uygulamam, günlükleri parametreler olmadan ayrıştırır. Yürütülebilir dosyanın içindeki logs/ klasörüne gitmeli ya da logs/ yolunu ona gönderirse onu ayrıştırır.

+0

bu soruya göz at ile: http://stackoverflow.com/questions/ 674857/kullanmalı-appdomain-currentdomain-basedirectory-or-system-environment-current – Karsten

cevap

69

Environment.CurrentDirectory'u kullanın.

Geçerli çalışma dizininin tam yolunu alır veya ayarlar. \ Fan \ Fin \ günlükleri: c işaret eder BarlogsDirectory \ Foo \:
(MSDN Environment.CurrentDirectory Property)

string logsDirectory = Path.Combine(Environment.CurrentDirectory, "logs"); 

Başvurunuz c çalışıyorsa.

+15

Geçerli dizin direc farklıdır Geçerli yürütülebilir dosyayı içeren bir tory. – KFL

+0

Environment.CurrentDirectory, uygulamanızın çalıştırılması sırasında değişebilen ve değişebilen bir değerdir. Örneğin, varsayılan parametreleri kullanarak, WinForms içindeki OpenFileDialog, dosyanın –

6

En Güvenli yol:

string temp = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); 
+3

arasından seçildiği dizine bu değeri değiştirir. CodeBase, dosyanın bulunduğu yerin URL'sidir. Konum, gerçekte olduğu yerin yoludur. yüklendi. Örneğin, derleme internetten indirildiyse, CodeBase "http: //" ile başlayabilir, ancak Konum "C: \" ile başlayabilir. Dosya gölge kopyalanmışsa, Konum, gölge kopyalar dizinindeki dosyanın kopyasına giden yol olacaktır. CodeBase'in GAC'deki derlemeler için ayarlanması garanti edilmediğini bilmek de iyi bir şeydir. Ancak, diskten yüklenen derlemeler için her zaman konum belirlenir. –

+0

Dosyanın diskte olduğundan emin olmak için bu sürümü “dosya: //” yolu yerine “normal” bir yol almak için kullanıyorum: Path.GetDirectoryName (new Uri (this.GetType(). Assembly.GetName() .CodeBase) .LocalPath) – Timo

16

bunu kullanın:

System.Reflection.Assembly.GetExecutingAssembly().Location 

birleştirin olduğunu

System.IO.Path.GetDirectoryName if all you want is the directory. 
+2

[Kaynak] (http://stackoverflow.com/a/837501/397322) – William

+0

Zamanlanmış Görev altında çalışan Environment.CurrentDirectory kullanırsanız, C: \ Windows \ system32 \ dizinine gider. Yürütme yolu olmayan günlük. Sonra bu System.Reflection.Assembly.GetExecutingAssembly() kullanır. Yer, doğru exe yürütme yolumu gösterir. Teşekkürler! – LifeiSHot

+0

Bu, yerel IIS çalıştıran birim testlerinde veya web projelerinde ümit ettiğiniz gibi çalışmayabilir. 'CodeBase' cevabı yapar. – Timo