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