我正在检查是否存在无法找到它的文件,无论它是否存在
if (System.IO.File.Exists("~/files/downloads/" + fileCode + ".pdf"))
{
return File("~/files/downloads/" + fileCode, "application/pdf", Server.UrlEncode(fileCode));
}
else
{
return View("ErrorNotExistsView");
}
如何修改代码以正确检查文件是否存在?
答案 0 :(得分:33)
System.IO.File
将起作用。相对路径不是相对于HTML根文件夹,而是当前工作目录。当前工作目录的值为C:\Program Files (x86)\IIS Express
。
文件路径开头的~
字符仅被解释为当前ASP.NET上下文的一部分,File
方法一无所知。
此处为您提供帮助的方法是HttpServerUtility.MapPath
如果您使用的是控制器方法,则可以在对象HttpContext.Server
上调用此方法,否则(例如在视图中)可以使用HttpContext.Current.Server
。
var relativePath = "~/files/downloads/" + fileCode + ".pdf";
var absolutePath = HttpContext.Server.MapPath(relativePath);
if(System.IO.File.Exists(absolutePath)) ....
答案 1 :(得分:2)
如果应用程序没有足够的权限来访问该文件,则Exists()可以返回false。因此,您应该将这些文件授予appPool特定的文件夹和文件。
答案 2 :(得分:2)
这是我的解决方案:
<span>
@{
var profileImg = "/Images/" + User.Identity.GetUserId() + ".jpg";
var absolutePath = HttpContext.Current.Server.MapPath(profileImg);
if (System.IO.File.Exists(absolutePath))
{
<img alt="image" width="50" height="50" class="img-circle" src="@profileImg" />
}
else
{
<img alt="image" width="50" height="50" class="img-circle" src="~/Images/profile_small.jpg" />
}
}
</span>
答案 3 :(得分:0)
File.Exists()将需要完整路径。 尝试使用类似的东西:
@"C:\users\yourUsername\myDocuments\files\\downloads\" + fileCode + ".pdf"
代替:
"~/files/downloads/" + fileCode + ".pdf"
答案 4 :(得分:0)
container.children[2].Style = this.FindResource("style") as Style;