ファイルを変換するプログラムを作りたい。ユーザーが実行可能ファイルを任意のディレクトリに配置できるようにして、そのプログラムを実行するとき(.exeをダブルクリック)、プログラムがexeファイルが存在する現在のフォルダー内のすべてのファイルを処理するようにします。プログラムはどのようにして現在実行中のパスを判別できますか?
私は試しましたSystem.Windows.Forms.Application.StartupPath
が、それは間違った方法のようです。
何か案は?
ファイルを変換するプログラムを作りたい。ユーザーが実行可能ファイルを任意のディレクトリに配置できるようにして、そのプログラムを実行するとき(.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);
GetEntryAssembly
とは、GetExecutingAssembly
驚きのあまりとして付属していませんが、関数名でも明らかです。同じことをした場合、なぜ2つの関数が必要なのでしょうか。:-)
System.Reflection.Assembly.GetExecutingAssembly().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
私は必ず存在しなければならないんだもののいくつかある理由を説明するcockamamie理由5種類の方法、事実上まったく同じことを行う、私は確かにそれが何であるかを知りません。それにもかかわらず、ほとんどの状況では、好きな方を自由に選択できるように見えます。
更新:
ショートカットのプロパティを変更し、「開始:」フィールドをに変更しましたC:\temp3
。これにより、次の出力が得られました。
C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
...これは、異なる方法間の少なくともいくつかの違いを示しています。
Environment.CurrentDirectory
いくつかの方法で変更できます...(ショットカット設定など)
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
指定されたパス文字列のディレクトリ情報を返します。
実行可能ファイル名を含む、アプリケーションを起動した実行可能ファイルのパスを取得します。
1。
Directory.GetCurrentDirectory();
2。
Thread.GetDomain().BaseDirectory
3。
Environment.CurrentDirectory
Environment.CurrentDirectory
いくつかの方法で変更できます...(ショットカット設定など)
Application.StartupPath
最高の結果のために使用しますimo。
あなたが使用できるexeパスが必要な場合 System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);