В настоящее время я использую следующую функцию, чтобы получить путь к временной папке для текущего пользователя:
string tempPath = System.IO.Path.GetTempPath();
На некоторых машинах это дает мне путь к временной папке текущего пользователя, например:
C: \ Documents and Settings \ администратор \ Локальные настройки \ Temp \
На некоторых машинах это дает мне путь к системной временной папке, например:
C: \ Windows \ TEMP
В документации MSDN также сказано, что вышеуказанный API возвращает временную папку текущей системы.
Есть ли другой доступный API, который дает мне путь к временной папке текущего пользователя, например:
C: \ Documents and Settings \ администратор \ Локальные настройки \ Temp \
c#
.net
temporary-directory
Anoop
источник
источник
Ответы:
System.IO.Path.GetTempPath()
это просто оболочка для нативного вызоваGetTempPath(..)
в Kernel32.Взгляните на http://msdn.microsoft.com/en-us/library/aa364992(VS.85).aspx
Скопировано с этой страницы:
Мне не совсем понятно, означает ли «каталог Windows» временный каталог под windows или сам каталог windows. Сброс временных файлов в сам каталог Windows звучит как нежелательный случай, но кто знает.
Поэтому, комбинируя эту страницу с вашим постом, я бы предположил, что либо одна из переменных TMP, TEMP или USERPROFILE для вашего пользователя-администратора указывает на путь к Windows, либо они не заданы, и он использует запасной путь к временному пути Windows.
источник
TEMP
Переменная окружения будет установлена в двух местах: для самого пользователя, так и для локальной машины. Если он не установлен для пользователя, то будет использоваться тот, который используется для локальной машины, и это всегда устанавливается при установке по умолчанию. Поэтому поиск обычно останавливается на втором шаге. При тестировании, еслиTMP
,TEMP
иUSERPROFILE
все установлено, что на самом деле делает откат к%SystemRoot%
(C:\Windows\
).НЕ используйте это:
Переменные среды могут быть переопределены, поэтому
TEMP
переменная не обязательно является каталогом.Правильный способ - использовать
System.IO.Path.GetTempPath()
как в принятом ответе.источник
System.IO.Path.GetTempPath()
.GetEnvironmentVariable("TEMP")
иGetTempPath()
.GetTempPath()
сначала проверяется переменная «TMP», затем «TEMP» и, наконец, «USERPROFILE». Если не найти ни одного из них, он возвращает путь к папке Windows. Это также гарантирует, что он возвращает правильный путь, но это не гарантирует, что путь существует.GetTempPath
в любом случае, если вы читаете документацию по ядру, так что, как указывает пользователь Logman, нет причин не использоватьGetEnvironmentVariable
... они оба имеют одинаковую слабость.У меня есть то же самое требование - мы хотим поместить журналы в определенный корневой каталог, который должен существовать в среде.
Если я хочу объединить это с подкаталогом, я должен быть в состоянии использовать
Path.Combine( ... )
.У
GetFolderPath
метода есть перегрузка для специальных параметров папки, которая позволяет вам контролировать, будет ли указанный путь создан или просто проверен.источник
пытаться
источник