Подтвердить что ты не робот

Получить путь к временной папке ASP.NET

Из моего кода на С#, который не запускается из IIS/ASP.NET, мне нужно добавить разрешения учетной записи пользователя в папку temp ASP.NET. (Это необходимо при добавлении моего сайта в IIS.) Папка на моей локальной системе:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Временные файлы ASP.NET

Мне не хотелось бы жестко закодировать этот путь в моем коде, поэтому мне было интересно, могу ли я извлечь его из.NET framework?

4b9b3361

Ответ 1

Хм. Я не знал, что это будет так сложно. Из-за отсутствия лучшего ответа я смог придумать что-то вроде этого:

using System.Runtime.InteropServices;

string net_base = Path.GetFullPath(Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), @"..\.."));
string strTemp32 = string.Concat(net_base, @"\Framework\", RuntimeEnvironment.GetSystemVersion(), @"\Temporary ASP.NET Files");
string strTemp64 = string.Concat(net_base, @"\Framework64\", RuntimeEnvironment.GetSystemVersion(), @"\Temporary ASP.NET Files");

Есть, очевидно, две временные папки - для 32-битных и 64-битных процессов. Он основан на этом образце, а также опирается на предположении, что по умолчанию ASP.NET временные папки hard-coded.

Поправьте меня, если вы найдете лучший способ?

Ответ 2

Попробуйте System.Web.HttpRuntime.CodegenDir чтобы получить физический путь к каталогу, где временные файлы ASP.NET хранятся для текущего приложения.

Ответ 3

Гораздо безопаснее будет, если вы используете свою собственную временную папку, например, App_Data

К сожалению Path.GetTempPath(); не будет возвращать эту папку, потому что это внутренняя папка asp.net.

Хорошей новостью является то, что вы можете изменить его, указав расположение файла в файле web.config с помощью элемента.

Ответ 4

Я думаю, это должно помочь...

В web.config/machine.config есть раздел в compilation tag где путь задан по умолчанию. Вот атрибуты раздела...

Документация здесь

Ответ 5

Простой способ проверки:

if (file.ContentLength > 0)
{
    string temp = Path.GetTempPath();

    var path = Path.Combine(temp, fileName);
    file.SaveAs(path);
}

и в web.config:

<system.web>
  <compilation tempDirectory="D:\MyTempFiles" />
</system.web>