繁体   English   中英

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

[英]Check if a file exists on the server

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

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

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

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

File.Exists()并且可能您想要对文件执行的所有其他操作都需要一个真实的路径。

您的wordDocName是相对的 URL。

只需使用

string fileName = Server.MapPath(wordDocName);

利用

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

获得完全合格的路径。 那应该对你有用。

您需要使用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;
    }

如果包含文件的目录被连接/符号链接引用,这可能不起作用。 我在自己的应用程序中有这种情况,如果我将真实路径放入文件,File.Exists() 返回 true。 但是如果我使用 Server.MapPath 但文件夹实际上是文件夹的连接点,它似乎失败了。 有人经历过同样的行为吗?

您必须使用 Server.MapPath(relativePath) 将路径转换为物理路径

if (File.Exists(filePath))

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

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

string docname="traintatkalantnoy.txt";

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM