我正在尝试使用我的ASP.NET网页后面的C#代码检查服务器上是否有文件。我知道文件确实存在,因为我事先将它放在服务器上的一段代码中。任何人都可以看到为什么它没有找到该文件。这是代码:
wordDocName = "~/specifications/" + Convert.ToInt32(ViewState["projectSelected"]) + ".doc";
ViewState["wordDocName"] = wordDocName;
if (File.Exists(wordDocName))
{
btnDownloadWordDoc.Visible = true;
}
else
{
btnDownloadWordDoc.Visible = false;
}
答案 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))