Haruskah saya menggunakan AppDomain.CurrentDomain.BaseDirectory atau System.Environment.CurrentDirectory?

86

Saya memiliki dua file exe di folder yang sama, saya dapat menjalankan exe2 dari tombol di exe1. Hari ini saya mengamati pelanggan melalui sesi (layanan terminal) jarak jauh dan exe2 gagal menjalankan kesalahan 'File tidak ditemukan', namun exe1 berada di direktori yang sama ketika kami memeriksa. Jadi, apakah saya harus menggunakan AppDomain.CurrentDomain.BaseDirectory atau System.Environment.CurrentDirectory ?

Terima kasih

Nathan Baulch
sumber
@ Jade M Bagaimana Anda menjalankan exe1 Anda di terminal?
Ms. Sonia
Saya ingin menambahkan dua sen saya dengan mengatakan bahwa string.GetFullPath(path)kegunaan Environment.CurrentDirectorydaripada CurrentDomain.BaseDirectory, saya terkejut.
JBSnorro

Jawaban:

185

Jika Anda ingin mencari file dalam direktori yang sama dengan aplikasi Anda, itu AppDomain.CurrentDomain.BaseDirectoryadalah pilihan yang tepat.

Environment.CurrentDirectoryadalah nilai yang dapat dan akan berubah selama menjalankan aplikasi Anda. Misalnya, dengan menggunakan parameter default, OpenFileDialog di WinForms akan mengubah nilai ini ke direktori tempat file dipilih.

JaredPar
sumber
Saya menggunakan tombol1 untuk menampilkan OpenFileDialog, lalu tombol2 untuk menampilkan Environment.CurrentDirectory, tetapi masih menampilkan folder debug, mengapa?
Lei Yang
18

AppDomain.CurrentDomain.BaseDirectorymengembalikan direktori dari mana domain aplikasi saat ini dimuat.
System.Environment.CurrentDirectorymengembalikan direktori sistem saat ini.
Dalam kasus Anda AppDomain.CurrentDomain.BaseDirectoryadalah solusi terbaik.

Albert
sumber
1
Agar jelas, System.Environment.CurrentDirectory mengembalikan direktori kerja saat ini (khusus proses) .
Oskar Berggren
14

Anda harus menggunakan AppDomain.CurrentDomain.BaseDirectory.

Misalnya dalam aplikasi layanan windows:

System.Environment.CurrentDirectoryakan mengembalikan C: \ Windows \ system32

Sementara

AppDomain.CurrentDomain.BaseDirectory akan mengembalikan [lokasi Application.exe]

Faktor penting lainnya yang perlu diperhatikan adalah AppDomain.CurrentDomain.BaseDirectoryproperti readonly sedangkan Environment.CurrentDirectorydapat berupa sesuatu yang lain jika perlu:

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

Seperti yang saya pahami, Anda harus menggunakan BaseDirectory. CurrentDirectorybisa berubah selama eksekusi program.

Joel Coehoorn
sumber
2

Saya biasanya menggunakan sesuatu seperti:

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

Saya juga telah melalui beberapa hari yang lalu, seperti yang saya gunakan

Environment.CurrentDirectory

karena memberi saya masalah pada server produksi tetapi berfungsi dengan baik dengan server lokal saya,

Jadi, saya coba dengan

System.AppDomain.CurrentDomain.BaseDirectory;

Dan itu berhasil bagi saya baik di Lingkungan.

Jadi, Seperti yang mereka semua katakan, Kita harus selalu ikut

System.AppDomain.CurrentDomain.BaseDirectory;

karena memeriksa direktori Domain Saat Ini untuk jalurnya.

lihat informasi lebih lanjut

Tidak dapat menemukan bagian dari kesalahan jalur di server

hud
sumber