检查asp.net mvc 5中是否存在文件

时间:2015-09-01 10:27:29

标签: c# asp.net-mvc file

我正在检查是否存在无法找到它的文件,无论它是否存在

if (System.IO.File.Exists("~/files/downloads/" + fileCode + ".pdf"))
            {
                return File("~/files/downloads/" + fileCode, "application/pdf", Server.UrlEncode(fileCode));
            }
            else
            {
                return View("ErrorNotExistsView");
            }

如何修改代码以正确检查文件是否存在?

5 个答案:

答案 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;