嗨,我想尝试访问我的帖子中的文件夹,就像这样
protected string GetFolderName(int OrgID)
{
string FolderName = string.Empty;
string[] strDirectories = Directory.GetDirectories(HttpContext.Current.Server.MapPath("~/Uploads/"));
if (strDirectories.Length > 0)
{
for (int count = 0; count < strDirectories.Length; count++)
{
string name = strDirectories[count].Substring(strDirectories[count].LastIndexOf("\\") + 1);
if (name.Contains("_"))
{
string companyId = name.Substring(name.LastIndexOf("_") + 1);
if (Convert.ToInt32(companyId) == OrgID)
{
FolderName = name;
break;
}
}
}
}
return FolderName;
}
这个方法是通过线程池调用的,它在这一行给我一个错误“对象引用未设置为对象的实例”
string[] strDirectories = Directory.GetDirectories(HttpContext.Current.Server.MapPath("~/Uploads/"));
请帮帮我
解决方案
我使用HttpRuntime.AppDomainAppPath
代替HttpContext.Current.Server.MapPath
而且效果很好。
答案 0 :(得分:2)
HttpContext.Current
返回正在执行的线程中的当前上下文 。线程池线程不对任何HTTP请求负责,因此它没有上下文。 Current
属性将返回null,这就是您获得异常的原因。我建议您在转移到线程池之前调用Directory.GetDirectories()
。另一种方法是改为传递上下文。
编辑:如果你不想在线程池线程中执行Directory.GetDirectories()
,你至少可以在原始线程中评估HttpContext.Current.Server.MapPath("~/Uploads/")
,并使 可用到线程池。基本上你只是想避免在错误的线程上评估HttpContext.Current
。
答案 1 :(得分:1)
发送HttpContext.Current.Server.MapPath("~/Uploads/")
作为QueueUserWorkItem