Abrufen des temporären Ordnerpfads für den aktuellen Benutzer
Die Funktion System.IO.Path.GetTempPath() dient zum Abrufen des Pfads in den temporären Ordner für das aktuelle System. Es wurde jedoch berichtet, dass auf bestimmten Computern der temporäre Ordnerpfad des Systems anstelle des benutzerspezifischen Pfads zurückgegeben wird.
Das Problem ist auf die zugrunde liegende native GetTempPath()-Funktion in Kernel32 zurückzuführen, die Path.GetTempPath() Anrufe. Laut Microsoft-Dokumentation sucht diese Funktion nacheinander nach den folgenden Umgebungsvariablen und verwendet den ersten gefundenen Pfad:
Es ist unklar, ob mit der Windows-Verzeichnisreferenz das Windows-TEMP-Verzeichnis oder das Windows-Verzeichnis gemeint ist Verzeichnis selbst. Es ist jedoch wahrscheinlich, dass für einen Administratorbenutzer eine der Variablen TMP, TEMP oder USERPROFILE auf den Windows-Pfad verweist, was dazu führt, dass der falsche Pfad zurückgegeben wird.
Alternativ können diese Variablen nicht gesetzt sein, was dazu führt, dass Fallback auf den temporären Pfad des Systems.
Glücklicherweise ist es möglich, den benutzerspezifischen temporären Ordnerpfad direkt über die API-Funktion GetTempPathEx() abzurufen. Diese Funktion benötigt einen Flag-Parameter, der angibt, ob der Benutzer- oder System-Temp-Pfad abgerufen werden soll:
[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 }
Indem Sie den pathFlags-Parameter auf PATH_USER_TEMPORARY setzen, können Sie sicherstellen, dass der benutzerspezifische temporäre Ordnerpfad zurückgegeben wird:
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() }
Dieser Ansatz bietet eine zuverlässigere Methode zum Abrufen des temporären Ordnerpfads des aktuellen Benutzers, unabhängig von den Systemeinstellungen oder der Umgebung Variablen.
Das obige ist der detaillierte Inhalt vonWie erhalte ich zuverlässig den temporären Ordnerpfad des aktuellen Benutzers in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!