检查服务器上是否存在文件

时间:2011-06-01 16:56:40

标签: c# asp.net file

我正在尝试使用我的ASP.NET网页后面的C#代码检查服务器上是否有文件。我知道文件确实存在,因为我事先将它放在服务器上的一段代码中。任何人都可以看到为什么它没有找到该文件。这是代码:

wordDocName = "~/specifications/" + Convert.ToInt32(ViewState["projectSelected"]) + ".doc";
ViewState["wordDocName"] = wordDocName;
if (File.Exists(wordDocName))
{
    btnDownloadWordDoc.Visible = true;
}
else
{
    btnDownloadWordDoc.Visible = false;
}

8 个答案:

答案 0 :(得分:46)

文件路径应该是物理的而不是虚拟的。使用

if (File.Exists(Server.MapPath(wordDocName)))

答案 1 :(得分:2)

File.Exists()可能你想要对文件做的其他事情都需要一个真正的路径。

您的wordDocName是相对网址。

只需使用

string fileName = Server.MapPath(wordDocName);

答案 2 :(得分:1)

使用

Server.MapPath("~/specifications/" + Convert.ToInt32(ViewState["projectSelected"]) + ".doc")

获取完全合格的路径。这应该是你的伎俩。

答案 3 :(得分:1)

您需要使用Server.MapPath例如

    wordDocName = Server.MapPath("~/specifications/" + Convert.ToInt32(ViewState["projectSelected"]) + ".doc");
    ViewState["wordDocName"] = wordDocName;
    if (File.Exists(wordDocName))
    {
        btnDownloadWordDoc.Visible = true;
    }
    else
    {
        btnDownloadWordDoc.Visible = false;
    }

答案 4 :(得分:0)

您必须使用Server.MapPath(relativePath)

将路径转换为物理路径
if (File.Exists(filePath))

wordDocName = "~/specifications/" + ViewState["projectSelected"] + ".doc";        
btnDownloadWordDoc.Visible = File.Exists(Server.MapPath(wordDocName));

答案 5 :(得分:0)

字符“~”是ASP.NET中的一个特殊字符,用于获取虚拟路径规范,只是表示“应用程序的根目录”。 .NET BCL不像File API那样理解它,并且必须首先映射到带有Server.MapPath()物理路径,如其他人所说。

答案 6 :(得分:0)

如果保存文件的目录被结点/符号链接引用,则这可能不起作用。我在自己的应用程序中有这种情况,如果我将REAL路径放到文件中,File.Exists()返回true。但是,如果我使用Server.MapPath但该文件夹实际上是该文件夹的联结,它似乎失败了。任何人都有同样的行为吗?

答案 7 :(得分:-3)

string docname="traintatkalantnoy.txt";

string a = (Server.MapPath(docname)); if (File.Exists(a))