ファイルを変換するプログラムを作りたい。ユーザーが実行可能ファイルを任意のディレクトリに配置できるようにし、そのプログラムを実行するとき(.exeをダブルクリック)、exeファイルが存在する現在のフォルダー内のすべてのファイルをプログラムで処理できるようにします。プログラムは、現在実行されているパスをどのように判別できますか?
私は試しSystem.Windows.Forms.Application.StartupPath
ましたが、それは間違った方法のようです。
何か案は?
特にショートカットを使用してプログラムを実行する場合は、現在のディレクトリが実行フォルダと異なる可能性があるため、この場合は使用しないでください。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
事実上まったく同じことを行う5つの異なる方法がある理由を説明するために、いくつかのコカマミの理由があるはずですが、それが何であるかは確かにわかりません。それにもかかわらず、ほとんどの状況下では、好きなものを自由に選択できるように見えます。
更新:
「StartIn:」フィールドをに変更して、ショートカットプロパティを変更しましたC:\temp3
。これにより、次の出力が得られました。
C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
...これは、さまざまな方法の違いの少なくともいくつかを示しています。
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
指定されたパス文字列のディレクトリ情報を返します。
アプリケーションを開始した実行可能ファイルのパス(実行可能ファイル名を含む)を取得します。
これを使って、
var currentDirectory = System.IO.Directory.GetCurrentDirectory();
これも使用できます。
var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
.NETCOREで使用する場合System.AppContext.BaseDirectory
(の代わりとしてAppDomain.CurrentDomain.BaseDirectory
)
1.1。
Directory.GetCurrentDirectory();
2.2。
Thread.GetDomain().BaseDirectory
3.3。
Environment.CurrentDirectory
これは、特にdotnetコアの単一ファイルの公開を使用する場合に最適です。
Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)
。
Application.StartupPath
最良の結果を得るには、imoを使用します。
exeパスが必要な場合は、System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
このコードブロックは、文字列タイプでアプリディレクトリのパスを作成します
string path="";
path=System.AppContext.BaseDirectory;
幸運を
これは私のために働いたものです:
var currentDir = Directory.GetCurrentDirectory().Substring(0, Directory.GetCurrentDirectory().LastIndexOf("bin"));