Bagaimana cara mengetahui direktori tempat aplikasi konsol saya dijalankan?

91

Bagaimana cara mengetahui direktori tempat aplikasi konsol saya berjalan dengan C #?

John Sheehan
sumber

Jawaban:

160

Untuk mendapatkan direktori tempat file .exe berada:

AppDomain.CurrentDomain.BaseDirectory

Untuk mendapatkan direktori saat ini:

Environment.CurrentDirectory
Hallgrim
sumber
2
Terima kasih. Membantu ketika C # .exe ada di satu folder tetapi dipanggil dari folder lain (misalnya: ketika ada di sistem PATH)
DeepSpace101
14
Untuk .NET Core, itu System.AppContext.BaseDirectory.
NightOwl888
15

Bergantung pada hak yang diberikan kepada aplikasi Anda, apakah penyalinan bayangan berlaku atau tidak dan opsi pemanggilan dan penerapan lainnya, metode yang berbeda dapat bekerja atau memberikan hasil yang berbeda sehingga Anda harus memilih senjata dengan bijak. Karena itu, semua hal berikut ini akan menghasilkan hasil yang sama untuk aplikasi konsol tepercaya penuh yang dijalankan secara lokal di mesin tempatnya berada:

Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath );
Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( Environment.GetCommandLineArgs()[0] );
Console.WriteLine( Process.GetCurrentProcess().MainModule.FileName );

Anda perlu membaca dokumentasi dari anggota di atas untuk melihat izin yang tepat yang diperlukan.

Atif Aziz
sumber
5

Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Location)

Jason Kanaris
sumber
3

Di .NET, Anda dapat menggunakan System.Environment.CurrentDirectoryuntuk mendapatkan direktori tempat proses dimulai.
System.Reflection.Assembly.GetExecutingAssembly().Locationakan memberi tahu Anda lokasi rakitan yang sedang dijalankan (itu hanya menarik jika rakitan yang sedang dijalankan dimuat dari suatu tempat yang berbeda dari lokasi rakitan tempat proses dimulai).

Travis Illig
sumber
1

Di windows (tidak yakin tentang Unix dll.) Ini adalah argumen pertama dalam baris perintah.

Di C / C ++ item pertama di argv *

WinAPI - GetModuleFileName (NULL, char *, MAX_PATH)

Jakub Kotrla
sumber
Ya, di .NET juga sama. Arg pertama selalu merupakan jalur lengkap yang dapat dieksekusi.
Adam Neal
1

Application.StartUpPath;


sumber
mau menautkan ke beberapa dokumentasi?
John Sheehan
0

Misalkan nama proyek aplikasi konsol inti .Net Anda adalah DataPrep.

Dapatkan Direktori Basis Proyek:

Console.WriteLine(Environment.CurrentDirectory);

Keluaran: ~ DataPrep \ bin \ Debug \ netcoreapp2.2

Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\"));
Console.WriteLine(ProjectDirPath);

Keluaran: ~ DataPrep \

RM Shahidul Islam Shahed
sumber
0

Gunakan AppContext.BaseDirectoryuntuk .net5.

vivek nuna
sumber