2011-08-11 11 views
5

C#実行ファイルが実行されているパスを取得する最良の方法は何ですか?C#実行ファイルディレクトリを実行中

私は、一時フォルダなどのためにそれを使用する必要があり、現在、私が使用しています:

Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) 

しかし、私はその後、実行する必要があります。これは私のURI型パスを与えるよう

.Replace("file:\\", string.Empty) 

を(すなわち、ファイルが最初に\ある)、私のコードの他の部分では使用できません。

答えて

10

ないあなたの質問に正確な答えを参照してください、しかし、私が見てすることをお勧め。ロケーション); 文字列txtfile = Path.Combine(executableLocation、 "example.txt");

+1

私はこれが正確な答えであると言います。一時ファイルは一時フォルダに移動することになっています。それがそこにあるのです。 –

+1

'Path.GetTempPath()'もあります。 – wasatchwizard

23
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 
+0

これは、任意のC#プロジェクト(winforms、wpf、consoleなど)で実行可能ファイルのパスを取得する唯一の信頼できる方法であり、確かに元の質問に対する最良の答えです。しかし、この場合、ApplicationDataのアプリケーション固有のフォルダを使用する必要があります。本当に一時的なものでない限り(つまりファイルが数秒以上または特定のプロセス中に使用されない場合を除いて)一時ディレクトリを使用することを控えます。一時的に一時フォルダを定期的にクリアします。 – wasatchwizard

+0

なぜ "Path.GetDirectoryName()"が必要なのですか?Locationプロパティは完全なパスを既に提供しているようです。 –

+1

@MikeKロケーションはファイル名を含みますが、ディレクトリだけが必要です(この質問のタイトルを参照してください); –

1

試してみてください。

Application.StartupPath 

それは実行可能ファイル名なしでパスを返す必要があります。

+1

'Application.StartupPath'はWinForms(つまりSystem.Windows.Formsアセンブリを参照すること)で利用できます。 。[リンク](http://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath(v = vs.110).aspx) – wasatchwizard

+0

うん、忘れて、@wasatchwizardあなたのコメントに+1してください。 – Rolice

3

お試しくださいEnvironment.CurrentDirectory これは現在作業中のディレクトリのフォルダを返します。非ため

あなたは(ユーザーをローミング)ApplicationDataを使用することができますかLocalApplicationData(:一時フォルダなどを使用すると、セキュリティ上の理由から、実行ディレクトリを使用してはならないために

3

は... MSは、ビルトインこのために何かをしていますEnvironment.SpecialFolderからCommonApplicationData(ユーザー以外のものについて) - あなたがそれらのフォルダ内に作成するもの(ファイル+フォルダ)は、あなたがappを実行しているユーザーのために必要な権限/権限で既に設定されています。管理者)はそこに行くことができます...あなたがそこに置くデータを暗号化することができる安全性をさらに高めるために...

Path.GetTempFileName() 

http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx

1

アセンブリがシャドウコピーされた場合、Assembly.Locationはdllのシャドウコピーを指します。

ビルド出力ディレクトリの使用Assembly.CodeBaseの場所を知りたい場合は、すなわち:

Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath) 

便利ですが、テストスイートを実行するときに、たとえば、アセンブリのディレクトリから他のリソースにアクセスしたい場合。

関連する問題