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