ファイルを変換するプログラムを作りたい。実行可能ファイルを任意のディレクトリに配置できるようにし、そのプログラムを実行するとき(.exeをダブルクリック)、実行ファイルが現在のフォルダ内のすべてのファイルを処理するようにします。存在します。プログラムは、現在実行しているパスをどのように判断できますか?
私はSystem.Windows.Forms.Application.StartupPath
を試しましたが、それは間違った方法のようです。
何か案は?
特にショートカットでプログラムを実行するときは、カレントディレクトリが実行フォルダと異なる場合があるため、notをDirectory.GetCurrentDirectory()
として使用してください。
あなたの目的のためにPath.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
を使うのが良いです。現在実行中のアセンブリが存在するパス名を返します。
私の提案したアプローチでは、 SonerGönül が彼の答えで言ったように、実行中のアセンブリ、エントリアセンブリ、または他のロードされたアセンブリを区別することができます。
System.IO.Path.GetDirectoryName(Application.ExecutablePath);
十分であるかもしれません。これはに等しいだろう
System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
System.AppDomain.CurrentDomain.BaseDirectory
これにより、アプリケーションの実行ディレクトリがわかります。これはWebアプリケーションでも機能します。その後ファイルにアクセスできます。
次のコードで簡単なコンソールアプリケーションを作成しました。
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 で示しています。
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
指定したパス文字列のディレクトリ情報を返します。
実行可能ファイル名を含む、アプリケーションを起動した実行可能ファイルのパスを取得します。
これを使って、
var currentDirectory = System.IO.Directory.GetCurrentDirectory();
これも使えます。
var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
1。
Directory.GetCurrentDirectory();
2。
Thread.GetDomain().BaseDirectory
3。
Environment.CurrentDirectory
.NET CORE use System.AppContext.BaseDirectory
の場合
(AppDomain.CurrentDomain.BaseDirectory
の代わりに)
最良の結果を得るには Application.StartupPath
を使用してください。
Exeファイルのパスが必要な場合は、System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly()。Location);を使用できます。