Konsol uygulamamın hangi dizinde çalıştığını nasıl öğrenebilirim?


Yanıtlar:


160

.Exe dosyasının olduğu dizini almak için:

AppDomain.CurrentDomain.BaseDirectory

Mevcut dizini almak için:

Environment.CurrentDirectory

2
Teşekkürler. C # .exe bir klasörde olduğunda ancak başka bir klasörden çağrıldığında yardımcı olur (örneğin: sistem
PATH'ında olduğunda

14
.NET Core için bu System.AppContext.BaseDirectory.
NightOwl888

15

Uygulamanıza verilen haklara, gölge kopyalamanın yürürlükte olup olmadığına ve diğer başlatma ve dağıtım seçeneklerine bağlı olarak, farklı yöntemler çalışabilir veya farklı sonuçlar verebilir, bu nedenle silahınızı akıllıca seçmeniz gerekecektir. Bunu söyledikten sonra, aşağıdakilerin tümü, bulunduğu makinede yerel olarak yürütülen tamamen güvenilir bir konsol uygulaması için aynı sonucu verecektir:

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 );

Gerekli izinleri tam olarak görmek için yukarıdaki üyelerin belgelerine başvurmanız gerekecektir.



3

.NET'te, System.Environment.CurrentDirectoryişlemin başlatıldığı dizini almak için kullanabilirsiniz .
System.Reflection.Assembly.GetExecutingAssembly().Locationsize şu anda yürütülmekte olan derlemenin konumunu söyleyecektir (bu yalnızca şu anda yürütülmekte olan derleme, işlemin başladığı derlemenin konumundan farklı bir yerden yüklenmişse ilginçtir).


1

Windows'ta (Unix hakkında emin değilim vb.), Komut satırındaki ilk argümandır.

C / C ++ 'da argv * içindeki ilk öğe

WinAPI - GetModuleFileName (NULL, char *, MAX_PATH)


Evet, .NET'te de durum aynı. İlk argüman her zaman çalıştırılabilir dosyanın tam yoludur.
Adam Neal

1

Application.StartUpPath;


bazı belgelere bağlantı vermek ister misiniz?
John Sheehan

0

Net çekirdek konsol uygulama proje adınızın DataPrep olduğunu varsayalım.

Proje Temel Dizinini Alın:

Console.WriteLine(Environment.CurrentDirectory);

Çıktı: ~ DataPrep \ bin \ Debug \ netcoreapp2.2

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

Çıktı: ~ DataPrep \


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.