コンソールアプリが実行されているディレクトリを確認するにはどうすればよいですか?


91

コンソールアプリがC#で実行されているディレクトリを確認するにはどうすればよいですか?

回答:


160

.exeファイルがあるディレクトリを取得するには:

AppDomain.CurrentDomain.BaseDirectory

現在のディレクトリを取得するには:

Environment.CurrentDirectory

2
ありがとう。C#.exeが1つのフォルダーにあるが、別のフォルダーから呼び出された場合に役立ちます(例:システムPATH上にある場合)
DeepSpace101 2014

14
.NET Coreの場合は、ですSystem.AppContext.BaseDirectory
nightOwl888 2017

15

アプリケーションに付与された権限、シャドウコピーが有効かどうか、その他の呼び出しと展開のオプションに応じて、さまざまな方法が機能するか、さまざまな結果が得られる可能性があるため、武器を賢く選択する必要があります。そうは言っても、以下のすべては、それが存在するマシンでローカルに実行される完全に信頼されたコンソールアプリケーションに対して同じ結果をもたらします。

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

必要な正確な権限を確認するには、上記のメンバーのドキュメントを参照する必要があります。



3

.NETでは、を使用System.Environment.CurrentDirectoryして、プロセスが開始されたディレクトリを取得できます。
System.Reflection.Assembly.GetExecutingAssembly().Location現在実行中のアセンブリの場所が表示されます(これは、現在実行中のアセンブリが、プロセスが開始されたアセンブリの場所とは異なる場所からロードされている場合にのみ興味深いものです)。


1

Windows(Unixなどについてはよくわかりません)では、コマンドラインの最初の引数です。

argv *のC / C ++ firtsアイテム

WinAPI-GetModuleFileName(NULL、char *、MAX_PATH)


はい、.NETでも同じです。最初の引数は常に実行可能ファイルの絶対パスです。
アダムニール

1

Application.StartUpPath;


いくつかのドキュメントにリンクする気ですか?
ジョンシーハン

0

.Netコアコンソールアプリケーションプロジェクト名がDataPrepであるとしましょう。

プロジェクトベースディレクトリを取得します。

Console.WriteLine(Environment.CurrentDirectory);

出力:〜DataPrep \ bin \ Debug \ netcoreapp2.2

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

出力:〜DataPrep \


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.