現在のユーザーの一時フォルダーのパスを取得する
System.IO.Path.GetTempPath() 関数は、パスを取得するように設計されています。現在のシステムの一時フォルダーにコピーされます。ただし、特定のマシンでは、ユーザー固有のパスではなくシステムの一時フォルダー パスが返されることが報告されています。
この問題は、Kernel32 の基礎となるネイティブ GetTempPath() 関数である Path.GetTempPath() に起因します。呼び出します。 Microsoft のドキュメントによると、この関数は次の環境変数を順番に検索し、最初に見つかったパスを使用します:
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 サイトの他の関連記事を参照してください。