web-dev-qa-db-ja.com

現在のユーザーの一時フォルダを取得する方法

現在私は現在のユーザーの一時フォルダパスを取得するために次の関数を使用しています。

string tempPath = System.IO.Path.GetTempPath();

いくつかのマシンではそれは私のように現在のユーザーの一時フォルダのパスを与えます:

C:\ Documents and Settings \管理者\ローカル設定\ Temp \

いくつかのマシンではそれは私にシステムの一時フォルダのパスを与えます:

C:\ Windows\TEMP

MSDNドキュメントでは、上記のAPIは現在のシステムの一時フォルダを返すとも述べています。

現在のユーザーの一時フォルダーのパスを、このようにして提供する他のAPIはありますか。

C:\ Documents and Settings \管理者\ローカル設定\ Temp \

369
Anoop

System.IO.Path.GetTempPath()は、Kernel32でGetTempPath(..)をネイティブで呼び出すためのラッパーです。

http://msdn.Microsoft.com/ja-jp/library/aa364992(VS.85).aspx をご覧ください。

そのページからコピーしたもの:

GetTempPath関数は、次の順序で環境変数の存在を確認し、見つかった最初のパスを使用します。

  • TMP環境変数で指定されたパス。
  • TEMP環境変数で指定されたパス。
  • USERPROFILE環境変数で指定されたパス。
  • Windowsディレクトリ.

"The Windows directory"がwindowsの下の一時ディレクトリを意味するのか、それともwindowsディレクトリ自体を意味するのかは私には完全には明らかではありません。 windowsディレクトリ自体に一時ファイルをダンプすることは、望ましくないケースのように聞こえますが、誰が知っていますか。

そのページとあなたの投稿を組み合わせると、管理者ユーザーのTMP、TEMP、またはUSERPROFILE変数のいずれかがwindowsパスを指しているか、または設定されていないためwindows tempパスにフォールバックしていると思います。

388

これを使用しないでください

System.Environment.GetEnvironmentVariable("TEMP")

環境変数は上書きされる可能性があるため、TEMP変数は必ずしもディレクトリではありません。

正しい方法は、受け入れられた答えのようにSystem.IO.Path.GetTempPath()を使うことです。

26
Helen

私はこれと同じ要件を持っています - 私たちは環境内に存在するべきである特定のルートディレクトリにログを置きたいです。

public static readonly string DefaultLogFilePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

これをサブディレクトリと結合したい場合は、Path.Combine( ... )を使用できるはずです。

GetFolderPathメソッドには特別なフォルダオプションに対するオーバーロードがあります。これは指定されたパスが作成されるか単に検証されるかを制御することを可能にします。

20
IAbstract