ホームページ >バックエンド開発 >C++ >C# で現在のユーザーの一時フォルダーのパスを確実に取得する方法

C# で現在のユーザーの一時フォルダーのパスを確実に取得する方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-05 11:46:39187ブラウズ

How to Reliably Get the Current User's Temporary Folder Path in C#?

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

System.IO.Path.GetTempPath() 関数は、パスを取得するように設計されています。現在のシステムの一時フォルダーにコピーされます。ただし、特定のマシンでは、ユーザー固有のパスではなくシステムの一時フォルダー パスが返されることが報告されています。

この問題は、Kernel32 の基礎となるネイティブ GetTempPath() 関数である Path.GetTempPath() に起因します。呼び出します。 Microsoft のドキュメントによると、この関数は次の環境変数を順番に検索し、最初に見つかったパスを使用します:

  • TMP
  • TEMP
  • USERPROFILE
  • Windows ディレクトリ

Windows ディレクトリ参照が、 Windows TEMP ディレクトリまたは Windows ディレクトリ自体。ただし、管理者ユーザーの場合、TMP、TEMP、または USERPROFILE 変数のいずれかが Windows パスを指している可能性があり、その結果、間違ったパスが返されることになります。

または、これらの変数が設定されていないため、システムの一時パスにフォールバックします。

幸いなことに、API 関数を使用してユーザー固有の一時フォルダーのパスを直接取得することができます。 GetTempPathEx()。この関数は、ユーザーまたはシステムの一時パスを取得するかどうかを指定するフラグ パラメーターを受け取ります:

[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
static extern bool GetTempPathEx(PathFlags pathFlags, StringBuilder pathBuffer, int bufferSize);

public enum PathFlags
{
    PATH_TEMPORARY = 0,
    PATH_USER_TEMPORARY = 1
}

pathFlags パラメーターを PATH_USER_TEMPORARY に設定することで、ユーザー固有の一時フォルダー パスが返されるようにすることができます:

StringBuilder sb = new StringBuilder(260);
if (GetTempPathEx(PathFlags.PATH_USER_TEMPORARY, sb, sb.Capacity))
{
    string tempPath = sb.ToString();
    // User-specific temporary folder path is obtained
}
else
{
    // Handle error using Marshal.GetLastWin32Error()
}

このアプローチは、システム設定や環境に関係なく、現在のユーザーの一時フォルダーのパスを取得するためのより信頼性の高い方法を提供します。変数。

以上がC# で現在のユーザーの一時フォルダーのパスを確実に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。