同じフォルダに2つのexeファイルがあります。exe1のボタンからexe2を実行できます。今日、リモート(ターミナルサービス)セッションで顧客を監視していて、exe2が「ファイルが見つかりません」エラーを実行できませんでしたが、チェックしたときにexe1は同じディレクトリにありました。では、AppDomain.CurrentDomain.BaseDirectoryまたはSystem.Environment.CurrentDirectoryを使用する必要がありますか?
ありがとう
同じフォルダに2つのexeファイルがあります。exe1のボタンからexe2を実行できます。今日、リモート(ターミナルサービス)セッションで顧客を監視していて、exe2が「ファイルが見つかりません」エラーを実行できませんでしたが、チェックしたときにexe1は同じディレクトリにありました。では、AppDomain.CurrentDomain.BaseDirectoryまたはSystem.Environment.CurrentDirectoryを使用する必要がありますか?
ありがとう
string.GetFullPath(path)
ではEnvironment.CurrentDirectory
なく使用すると言って、2セントを追加したいと思いCurrentDomain.BaseDirectory
ます。
回答:
アプリケーションと同じディレクトリにあるファイルを検索する場合AppDomain.CurrentDomain.BaseDirectory
は、が正しい選択です。
Environment.CurrentDirectory
は、アプリケーションの実行中に変化する可能性があり、変化する値です。たとえば、デフォルトのパラメータを使用すると、WinFormsのOpenFileDialogは、この値をファイルが選択されたディレクトリに変更します。
AppDomain.CurrentDomain.BaseDirectory
現在のアプリケーションドメインがロードされたディレクトリを返します。
System.Environment.CurrentDirectory
現在のシステムディレクトリを返します。
あなたの場合AppDomain.CurrentDomain.BaseDirectory
は最良の解決策です。
を使用する必要がありますAppDomain.CurrentDomain.BaseDirectory
。
たとえば、Windowsサービスアプリケーションの場合:
System.Environment.CurrentDirectory
C:\ Windows \ system32を返します
一方
AppDomain.CurrentDomain.BaseDirectory
[Application.exeの場所]を返します
注意すべきもう1つの重要な要素AppDomain.CurrentDomain.BaseDirectory
は、読み取り専用プロパティEnvironment.CurrentDirectory
ですが、必要に応じて他のプロパティにすることもできます。
// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
私が理解しているように、を使用する必要がありますBaseDirectory
。 CurrentDirectory
プログラムの実行中に変更される可能性があります。
Visual Studio 2010テストプロジェクトで、[テスト設定の編集]の展開オプションを有効にすると、AppDomain.CurrentDomain.BaseDirectoryはTestResults \ Outフォルダー(bin \ debugではない)を指します。ただし、デフォルト設定はbin \ debugフォルダーを指します。
ここで私は説得力のある答えを見つけました。
AppDomain.CurrentDomain.BaseDirectoryにasp.netアプリの「bin」が含まれていないのはなぜですか?
私も使っていたので、この数日前を過ごしました
Environment.CurrentDirectory
本番サーバーで問題が発生していましたが、ローカルサーバーでは正常に機能していたため、
だから、私は
System.AppDomain.CurrentDomain.BaseDirectory;
そして、それは両方の環境で私のために働きました。
だから、彼ら全員が言ったように、私たちは常に一緒に行くべきです
System.AppDomain.CurrentDomain.BaseDirectory;
現在のドメインディレクトリでパスを確認します。
詳細情報をご覧ください