Как получить временную папку для текущего пользователя
В настоящее время я использую следующую функцию, чтобы получить путь к временной папке для текущего пользователя:
string tempPath = System.IO.Path.GetTempPath();
На некоторых машинах это дает мне путь к временной папке текущего пользователя, например:
C:\Documents and Settings\ администратор \ Локальные настройки \Temp\
На некоторых машинах это дает мне путь к системной временной папке, например:
C: \ Windows \ TEMP
В документации MSDN также сказано, что вышеуказанный API возвращает временную папку текущей системы.
Есть ли другой доступный API, который дает мне путь к временной папке текущего пользователя, например:
C:\Documents and Settings\ администратор \ Локальные настройки \Temp\
4 ответа
System.IO.Path.GetTempPath()
это просто обертка для родного вызова GetTempPath(..)
в Kernel32.
Взгляните на http://msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx
Скопировано с этой страницы:
Функция GetTempPath проверяет наличие переменных среды в следующем порядке и использует первый найденный путь:
- Путь, указанный в переменной среды TMP.
- Путь, указанный в переменной среды TEMP.
- Путь, указанный в переменной среды USERPROFILE.
- Каталог Windows.
Мне не совсем понятно, означает ли "каталог Windows" временный каталог под windows или сам каталог windows. Сброс временных файлов в сам каталог Windows звучит как нежелательный случай, но кто знает.
Поэтому, комбинируя эту страницу с вашим постом, я бы предположил, что либо одна из переменных TMP, TEMP или USERPROFILE для вашего пользователя-администратора указывает на путь к Windows, либо они не заданы, и он использует запасной путь к временному пути Windows.
НЕ используйте это:
System.Environment.GetEnvironmentVariable("TEMP")
Переменные среды могут быть переопределены, поэтому TEMP
переменная не обязательно является каталогом.
Правильный способ заключается в использовании System.IO.Path.GetTempPath()
как в принятом ответе.
У меня есть такое же требование - мы хотим поместить журналы в определенный корневой каталог, который должен существовать в среде.
public static readonly string DefaultLogFilePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
Если я хочу объединить это с подкаталогом, я должен иметь возможность использовать Path.Combine( ... )
,
GetFolderPath
Метод имеет перегрузку для специальных параметров папки, что позволяет вам контролировать, будет ли указанный путь создан или просто проверен.