Как получить временную папку для текущего пользователя


Я использую следующую функцию, чтобы получить путь к временной папке для текущего пользователя:

string tempPath = System.IO.Path.GetTempPath();

на некоторых машинах он дает мне путь к папке temp текущего пользователя, например:

C:Documents и настройкиадминистраторлокальные настройкиTemp

на некоторых машинах он дает мне системный путь к папке temp, например:

C:WindowsTEMP

в документации MSDN также говорится, что выше API возвращает Временная папка текущей системы.

есть ли другой доступный API, который дает мне путь к временной папке текущего пользователя следующим образом:

C:Documents и настройкиадминистраторлокальные настройкиTemp

4 349

4 ответа:

System.IO.Path.GetTempPath() Это просто обертка для собственного вызова GetTempPath(..) в ядре 32.

посмотреть http://msdn.microsoft.com/en-us/library/aa364992(против.85).аспн

скопировать с этой страницы:

функция GetTempPath проверяет наличие переменных окружения в следующем порядке и использует первый найденный путь:

  • путь, указанный переменной среды TMP.
  • в путь, указанный переменной среды TEMP.
  • путь, указанный переменной среды USERPROFILE.
  • каталог Windows.

мне не совсем ясно, означает ли" каталог Windows " временный каталог под windows или сам каталог windows. Сброс временных файлов в каталог windows сам по себе звучит как нежелательный случай, но кто знает.

Так что объединение этой страницы с вашим post Я бы предположил, что либо одна из переменных 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( ... ).

The GetFolderPath метод имеет перегрузку для специальных опций папки, которая позволяет вам контролировать, будет ли указанный путь создан или просто проверен.

попробовать

Environment.GetEnvironmentVariable("temp");