Dapatkan jalur folder saat ini


222

Saya ingin membuat program yang mengubah file. Saya ingin pengguna dapat menempatkan file yang dapat dieksekusi di direktori mana pun, dan ketika menjalankan program itu (mengklik dua kali pada .exe) Saya ingin program memproses semua file dalam folder saat ini di mana file exe ada . Bagaimana program dapat menentukan jalur yang saat ini dijalankannya?

Saya mencoba System.Windows.Forms.Application.StartupPathtetapi tampaknya itu cara yang salah.

Ada ide?

Jawaban:


334

Anda tidak boleh menggunakan Directory.GetCurrentDirectory()dalam kasus Anda, karena direktori saat ini mungkin berbeda dari folder eksekusi, terutama ketika Anda menjalankan program melalui jalan pintas.

Lebih baik digunakan Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);untuk tujuan Anda. Ini mengembalikan nama path tempat majelis yang sedang menjalankan berada.

Sementara pendekatan yang saya sarankan memungkinkan Anda untuk membedakan antara rakitan pelaksana, rakitan entri atau rakitan lainnya yang dimuat, seperti yang dikatakan Soner Gönül dalam jawabannya,

System.IO.Path.GetDirectoryName(Application.ExecutablePath);

mungkin juga cukup. Ini akan sama dengan

System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

10
GetEntryAssembly () dan GetExecutingAssembly () memiliki perbedaan yang menarik. Untuk detail, lihat stackoverflow.com/a/18562036/30289
bhadra

3
Seperti yang saya katakan: Ini mengembalikan nama path tempat majelis yang sedang menjalankan berada. Perbedaan antara GetEntryAssemblydan GetExecutingAssemblytidak terlalu mengejutkan, juga jelas dengan nama fungsinya. Jika mereka melakukan hal yang sama, mengapa harus ada dua fungsi? :-)
Thorsten Dittmar

2
+1 Assembly.GetEntryAssembly () membantu saya jika menjalankan aplikasi melalui clickonce
Artiom

9
Ini ada di System.Reflection, jadi System.Reflection.Assembly.GetExecutingAssembly().Locationlengkap - jika Anda menguji dari Window Segera
The Red Pea

147
System.AppDomain.CurrentDomain.BaseDirectory

Ini akan memberi Anda menjalankan direktori aplikasi Anda. Ini bahkan berfungsi untuk aplikasi web. Setelah itu Anda dapat membuka file Anda.


9
Ini adalah properti paling akurat untuk digunakan untuk tujuan ini. BaseDirectory CurrentDomain akan selalu menunjuk ke lokasi yang benar bahkan jika AppDomain secara dinamis dibuat untuk melihat rakitan dari lokasi yang berbeda.
dhruvin

Sempurna. Ini bekerja secara independen untuk aplikasi apa pun, terutama ketika menggunakan Streamreader, yang dapat membaca jalur absolut berbeda tergantung pada jenis aplikasi.
user3326078

40

Saya membuat aplikasi konsol sederhana dengan kode berikut:

Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory);
Console.WriteLine(System.Environment.CurrentDirectory);
Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
Console.WriteLine(Environment.CurrentDirectory);

Saya menyalin hasil yang dapat dieksekusi ke C:\temp2. Saya kemudian menempatkan jalan pintas ke executable itu C:\temp3, dan menjalankannya (sekali dari exe itu sendiri, dan sekali dari jalan pintas). Ini memberi output berikut dua kali:

C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2

Sementara saya yakin pasti ada beberapa alasan cockamamie untuk menjelaskan mengapa ada lima metode yang berbeda yang melakukan hampir hal yang persis sama, saya pasti tidak tahu apa itu. Namun demikian, kelihatannya dalam sebagian besar keadaan, Anda bebas memilih mana yang Anda sukai.

UPDATE: Saya memodifikasi properti Shortcut, mengubah bidang "Mulai Di:" menjadi C:\temp3. Ini menghasilkan output sebagai berikut:

C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3

... yang menunjukkan setidaknya beberapa perbedaan antara metode yang berbeda.


2
Terima kasih banyak.
baj9032

Catatan penting. Direktori kerja tidak selalu sama dengan direktori yang diinstal.
Jordan


21
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

Dari Path.GetDirectoryName

Mengembalikan informasi direktori untuk string path yang ditentukan.

Dari Application.ExecutablePath

Mendapat jalur untuk file yang dapat dieksekusi yang memulai aplikasi, termasuk nama yang dapat dieksekusi.


19

Gunakan ini,

var currentDirectory = System.IO.Directory.GetCurrentDirectory(); 

Anda dapat menggunakan ini juga.

var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

9

untuk penggunaan .NET CORESystem.AppContext.BaseDirectory

(sebagai pengganti untuk AppDomain.CurrentDomain.BaseDirectory)


6

1.

Directory.GetCurrentDirectory();

2.

Thread.GetDomain().BaseDirectory

3.

Environment.CurrentDirectory

Environment.CurrentDirectorydapat diubah dalam beberapa cara ... (pengaturan shotrtcut, dll)
Yousha Aleayoub


0

Jika Anda menginginkan jalur exe yang dapat Anda gunakan System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);


0

Ini bekerja paling baik untuk saya, terutama ketika menggunakan mempublikasikan file single dotnet core. Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.