Derzeit verwende ich die folgende Funktion, um den temporären Ordnerpfad für den aktuellen Benutzer abzurufen:
string tempPath = System.IO.Path.GetTempPath();
Auf einigen Computern gibt es mir den temporären Ordnerpfad des aktuellen Benutzers wie:
C: \ Dokumente und Einstellungen \ Administrator \ Lokale Einstellungen \ Temp \
Auf einigen Computern gibt es mir den Pfad des temporären Systemordners wie:
C: \ Windows \ TEMP
In der MSDN-Dokumentation heißt es außerdem, dass die obige API den temporären Ordner des aktuellen Systems zurückgibt.
Gibt es eine andere API, die mir den temporären Ordnerpfad des aktuellen Benutzers wie folgt angibt:
C: \ Dokumente und Einstellungen \ Administrator \ Lokale Einstellungen \ Temp \
c#
.net
temporary-directory
Anoop
quelle
quelle
Antworten:
System.IO.Path.GetTempPath()
ist nur ein Wrapper für einen nativen Aufruf vonGetTempPath(..)
Kernel32.Schauen Sie sich http://msdn.microsoft.com/en-us/library/aa364992(VS.85).aspx an
Von dieser Seite kopiert:
Mir ist nicht ganz klar, ob "Das Windows-Verzeichnis" das temporäre Verzeichnis unter Windows oder das Windows-Verzeichnis selbst bedeutet. Das Speichern von temporären Dateien im Windows-Verzeichnis selbst klingt nach einem unerwünschten Fall, aber wer weiß.
Wenn Sie diese Seite mit Ihrem Beitrag kombinieren, würde ich vermuten, dass eine der TMP-, TEMP- oder USERPROFILE-Variablen für Ihren Administrator-Benutzer auf den Windows-Pfad verweist, oder dass sie nicht festgelegt sind und ein Fallback auf den Windows-temporären Pfad erfolgt.
quelle
TEMP
Umgebungsvariable wird an zwei Stellen festgelegt: für den Benutzer selbst und für den lokalen Computer. Wenn es nicht für den Benutzer festgelegt ist, wird das für den lokalen Computer verwendet, und dies wird immer in einer Standardinstallation festgelegt. Daher stoppt die Suche normalerweise im zweiten Schritt. Bei der Prüfung, obTMP
,TEMP
undUSERPROFILE
alle sind nicht gesetzt, es tatsächlich tut zu fallen zurück%SystemRoot%
(C:\Windows\
).Verwenden Sie dies NICHT :
Umgebungsvariablen können überschrieben werden, daher ist die
TEMP
Variable nicht unbedingt das Verzeichnis.Der richtige Weg ist,
System.IO.Path.GetTempPath()
wie in der akzeptierten Antwort zu verwenden.quelle
System.IO.Path.GetTempPath()
.GetEnvironmentVariable("TEMP")
undGetTempPath()
.GetTempPath()
prüft zuerst auf die Variable "TMP", dann auf "TEMP" und schließlich auf "USERPROFILE". Wenn Sie keinen von diesen finden, wird der Pfad zum Windows-Ordner zurückgegeben. Es wird auch garantiert, dass der korrekte Pfad zurückgegeben wird, es wird jedoch nicht garantiert, dass der Pfad vorhanden ist.GetTempPath
stützt sich ohnehin auf Ihre Umgebungsvariablen, wenn Sie die Kerneldokumentation lesen. Wie Benutzer Logman darauf hinweist, gibt es keinen Grund, sie nicht zu verwenden.GetEnvironmentVariable
Beide haben dieselbe Schwäche.Ich habe die gleiche Anforderung - wir möchten Protokolle in einem bestimmten Stammverzeichnis ablegen, das in der Umgebung vorhanden sein sollte.
Wenn ich dies mit einem Unterverzeichnis kombinieren möchte, sollte ich es verwenden können
Path.Combine( ... )
.Die
GetFolderPath
Methode verfügt über eine Überladung für spezielle Ordneroptionen, mit denen Sie steuern können, ob der angegebene Pfad erstellt oder einfach überprüft werden soll.quelle
Versuchen
quelle