获取ASP.NET临时文件夹路径
从我的C#代码,不在IIS / ASP.NET中运行,我需要向ASP.NET临时文件夹添加用户帐户权限。 (将我的站点添加到IIS时需要。)本地系统上的文件夹是:
C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files
我不想将这条路径硬编码到我的代码中,所以我想知道我是否可以从.NET框架本身检索它?
嗯。 我不知道会那么复杂。 由于缺乏更好的答案,我能够想出这样的事情:
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
的假设 。
纠正我,如果你找到更好的方法?
尝试使用System.Web.HttpRuntime.CodegenDir
获取为当前应用程序存储ASP.NET临时文件的目录的物理路径。
如果您在App_Data中使用自己的临时文件夹,则会更加安全
不幸的是Path.GetTempPath();
不会返回此文件夹,因为它是asp.net内部文件夹。
好消息是您可以使用element更改它在web.config中指定文件位置。
我认为这应该有帮助……
在compilation tag
下的web.config/machine.config
有一个部分,默认情况下设置路径。 以下是该部分的属性……
文档在这里
最简单的validation方式:
if (file.ContentLength > 0) { string temp = Path.GetTempPath(); var path = Path.Combine(temp, fileName); file.SaveAs(path); }
并在web.config中: