AppDomain.CurrentDomain.BaseDirectory veya System.Environment.CurrentDirectory kullanmalı mıyım?


86

Aynı klasörde iki exe dosyam var, exe1'deki bir düğmeden exe2 çalıştırabilirim. Bugün bir müşteriyi uzak (terminal hizmetleri) oturumu üzerinden gözlemliyordum ve exe2 'Dosya bulunamadı' hatasını çalıştıramadı, ancak kontrol ettiğimizde exe1 aynı dizindeydi. Öyleyse AppDomain.CurrentDomain.BaseDirectory veya System.Environment.CurrentDirectory kullanmalı mıyım?

Teşekkürler


@Jade M Exe1'inizi terminalde nasıl çalıştırıyorsunuz?
Bayan Sonia

Sürprizime, bunun yerine string.GetFullPath(path)kullandığını söyleyerek iki sentimi eklemek istiyorum . Environment.CurrentDirectoryCurrentDomain.BaseDirectory
JBSnorro

Yanıtlar:


185

Uygulamanızla aynı dizinde bulunan dosyaları bulmak istiyorsanız AppDomain.CurrentDomain.BaseDirectory, doğru seçim budur.

Environment.CurrentDirectoryuygulamanızı çalıştırırken değişebilen ve değişecek bir değerdir. Örneğin, varsayılan parametreleri kullanarak, WinForms içindeki OpenFileDialog bu değeri dosyanın seçildiği dizine değiştirecektir.


OpenFileDialog'u göstermek için button1'i, ardından Environment.CurrentDirectory'yi göstermek için button2'yi kullandım, ancak yine de hata ayıklama klasörünü gösteriyor, neden?
Lei Yang

18

AppDomain.CurrentDomain.BaseDirectorygeçerli uygulama etki alanının yüklendiği dizini döndürür.
System.Environment.CurrentDirectorygeçerli sistem dizinini döndürür.
Sizin durumunuzda AppDomain.CurrentDomain.BaseDirectoryen iyi çözüm.


1
Açık olmak gerekirse, System.Environment.CurrentDirectory geçerli (işleme özgü) çalışma dizinini döndürür .
Oskar Berggren

14

Kullanmalısınız AppDomain.CurrentDomain.BaseDirectory.

Örneğin bir Windows hizmetleri uygulamasında:

System.Environment.CurrentDirectoryC: \ Windows \ system32 döndürür

Süre

AppDomain.CurrentDomain.BaseDirectory [Application.exe konumu] döndürür

Unutulmaması gereken bir diğer önemli faktör, AppDomain.CurrentDomain.BaseDirectorysalt okunur özelliktir, Environment.CurrentDirectoryancak gerekirse başka bir şey olabilir:

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

6

Anladığım kadarıyla kullanmalısın BaseDirectory. CurrentDirectoryprogramın yürütülmesi sırasında değişebilir.



2

Genellikle şöyle bir şey kullanırım:

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

2

Ben de kullandığım için birkaç gün önce

Environment.CurrentDirectory

bana üretim sunucusunda sorun yarattığı için yerel sunucumla iyi çalışıyordu,

Ben de denedim

System.AppDomain.CurrentDomain.BaseDirectory;

Ve her iki ortamda da benim için çalıştı.

Öyleyse, hepsinin söylediği gibi, her zaman birlikte gitmeliyiz

System.AppDomain.CurrentDomain.BaseDirectory;

yol için Current Domain dizinini kontrol ederken.

daha fazla bilgi için bir göz atın

Sunucuda yol hatasının bir parçası bulunamadı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.