Obecnie używam następującej funkcji, aby uzyskać ścieżkę folderu tymczasowego dla bieżącego użytkownika:
string tempPath = System.IO.Path.GetTempPath();
Na niektórych komputerach daje mi tymczasową ścieżkę do folderu bieżącego użytkownika, na przykład:
C: \ Documents and Settings \ administrator \ Local Settings \ Temp \
Na niektórych komputerach daje mi ścieżkę folderów temp systemu, np .:
C: \ Windows \ TEMP
Dokumentacja MSDN mówi również, że powyższe API zwraca folder tymczasowy bieżącego systemu.
Czy jest dostępny inny interfejs API, który daje mi ścieżkę folderu tymczasowego bieżącego użytkownika w następujący sposób:
C: \ Documents and Settings \ administrator \ Local Settings \ Temp \
c#
.net
temporary-directory
Anoop
źródło
źródło
Odpowiedzi:
System.IO.Path.GetTempPath()
jest tylko opakowaniem dla natywnego wywołaniaGetTempPath(..)
w Kernel32.Zajrzyj na http://msdn.microsoft.com/en-us/library/aa364992(VS.85).aspx
Skopiowano z tej strony:
Nie jest dla mnie do końca jasne, czy „katalog Windows” oznacza katalog tymczasowy w systemie Windows, czy sam katalog Windows. Zrzucanie plików tymczasowych do samego katalogu systemu Windows brzmi jak niepożądany przypadek, ale kto wie.
Więc łącząc tę stronę ze swoim postem, zgaduję, że albo jedna ze zmiennych TMP, TEMP, albo USERPROFILE dla Twojego administratora wskazuje na ścieżkę systemu Windows, albo nie są one ustawione, a powrót do ścieżki temp Windows.
źródło
TEMP
Zmienna będzie ustawiona w dwóch miejscach: dla samego użytkownika, a na komputerze lokalnym. Jeśli nie jest ustawiony dla użytkownika, użyty zostanie komputer lokalny, a to zawsze jest ustawione w instalacji domyślnej. Dlatego wyszukiwanie zwykle zatrzymuje się na drugim etapie. W testowaniu, czyTMP
,TEMP
iUSERPROFILE
są unieważnione, to faktycznie nie spadnie z powrotem do%SystemRoot%
(C:\Windows\
).NIE używaj tego:
Zmienne środowiskowe można zastąpić, więc
TEMP
zmienna niekoniecznie jest katalogiem.Prawidłowym sposobem jest użycie
System.IO.Path.GetTempPath()
jak w zaakceptowanej odpowiedzi.źródło
System.IO.Path.GetTempPath()
.GetEnvironmentVariable("TEMP")
iGetTempPath()
.GetTempPath()
najpierw sprawdza zmienną „TMP”, następnie „TEMP”, a na końcu „USERPROFILE”. Jeśli nie znajdziesz żadnej z nich, zwraca ścieżkę do folderu Windows. Gwarantuje również, że zwraca prawidłową ścieżkę, ale nie gwarantuje, że ścieżka istnieje.GetTempPath
i tak opiera się na zmiennych środowiskowych, jeśli czytasz dokumentację jądra, więc jak zauważył użytkownik Logman, nie ma powodu, aby nie używaćGetEnvironmentVariable
... oba mają tę samą słabość.Mam ten sam wymóg - chcemy umieścić dzienniki w określonym katalogu głównym, który powinien istnieć w środowisku.
Jeśli chcę połączyć to z podkatalogiem, powinienem móc użyć
Path.Combine( ... )
.GetFolderPath
Metoda ma przeciążenia dla specjalnych opcji folderów, które pozwala kontrolować, czy określona ścieżka być tworzone lub po prostu zweryfikowane.źródło
próbować
źródło