web-dev-qa-db-ja.com

現在のフォルダパスを取得する

ファイルを変換するプログラムを作りたい。実行可能ファイルを任意のディレクトリに配置できるようにし、そのプログラムを実行するとき(.exeをダブルクリック)、実行ファイルが現在のフォルダ内のすべてのファイルを処理するようにします。存在します。プログラムは、現在実行しているパスをどのように判断できますか?

私はSystem.Windows.Forms.Application.StartupPathを試しましたが、それは間違った方法のようです。

何か案は?

179
user2214609

特にショートカットでプログラムを実行するときは、カレントディレクトリが実行フォルダと異なる場合があるため、notDirectory.GetCurrentDirectory()として使用してください。

あなたの目的のためにPath.GetDirectoryName(Assembly.GetExecutingAssembly().Location);を使うのが良いです。現在実行中のアセンブリが存在するパス名を返します。

私の提案したアプローチでは、 SonerGönül が彼の答えで言ったように、実行中のアセンブリ、エントリアセンブリ、または他のロードされたアセンブリを区別することができます。

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

十分であるかもしれません。これはに等しいだろう

System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
285
System.AppDomain.CurrentDomain.BaseDirectory

これにより、アプリケーションの実行ディレクトリがわかります。これはWebアプリケーションでも機能します。その後ファイルにアクセスできます。

105
hakan

次のコードで簡単なコンソールアプリケーションを作成しました。

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

結果の実行ファイルをC:\temp2にコピーしました。その実行ファイルへのショートカットをC:\temp3に配置して実行しました(exeから1回、ショートカットから1回)。それは両方の場合に以下の出力を与えた。

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

some cockamamieにはほぼ同じことをする5つの異なるメソッドがある理由を説明する理由があるはずですが、それが何であるかはわかりません。それにもかかわらず、ほとんどの状況下で、あなたはあなたが好きな方を自由に選ぶことができるように思われるでしょう。

UPDATE:ショートカットのプロパティを変更し、 "Start In:"フィールドをC:\temp3に変更しました。その結果、次のような出力が得られました。

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

...これは、異なるメソッド間の違いを少なくとも some で示しています。

28
kmote
23
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

Path.GetDirectoryName から

指定したパス文字列のディレクトリ情報を返します。

Application.ExecutablePath から

実行可能ファイル名を含む、アプリケーションを起動した実行可能ファイルのパスを取得します。

20
Soner Gönül

これを使って、

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

これも使えます。

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

1。

Directory.GetCurrentDirectory();

2。

Thread.GetDomain().BaseDirectory

3。

Environment.CurrentDirectory
6
Tomtom

.NET CORE use System.AppContext.BaseDirectoryの場合

AppDomain.CurrentDomain.BaseDirectoryの代わりに)

4
yonatan

最良の結果を得るには Application.StartupPath を使用してください。

0
farosch

Exeファイルのパスが必要な場合は、System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly()。Location);を使用できます。

0