关于C#:获取ASP.NET临时文件夹路径

Get ASP.NET temporary folder path

从我的C#代码(不是从IIS / ASP.NET内部运行)中,我需要向ASP.NET临时文件夹添加用户帐户权限。 (将我的网站添加到IIS时,这是必需的。)我的本地系统上的文件夹是:

C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\Temporary ASP.NET Files

我不想将此路径硬编码到我的代码中,所以我想知道是否可以从.NET框架本身中检索它?


尝试System.Web.HttpRuntime.CodegenDir获取当前应用程序的ASP.NET临时文件存储目录的物理路径。


嗯我不知道会这么复杂。由于缺少更好的答案,我想出了这样的东西:

1
2
3
4
5
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的假设。

纠正我,如果您找到更好的方法?


如果在例如App_Data中使用自己的临时文件夹,将会更加安全。

不幸的是,Path.GetTempPath();不会返回此文件夹,因为它是asp.net内部文件夹。

好消息是,您可以使用element在web.config中指定文件位置来更改它。


验证的最简单方法:

1
2
3
4
5
6
7
if (file.ContentLength > 0)
{
    string temp = Path.GetTempPath();

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

并在web.config中:

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


我认为这应该有所帮助...

compilation tag下的web.config/machine.config中有一个部分,默认情况下会设置路径。这是该部分的属性...

这里的文件