【问题标题】:Check if a file exists on the server检查服务器上是否存在文件
【发布时间】:2016-07-27 15:28:42
【问题描述】:

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

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

【问题讨论】:

  • 您是否在 Windows 上使用 Unix 路径约定?
  • @GreenScreen:为什么要将 ViewState 转换为 int?它将被转换回一个字符串,并且您有 2 次转换有一个 ConversionException 的风险。

标签: c# asp.net file


【解决方案1】:

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

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

【讨论】:

  • 物理与虚拟的其他信息:ASP.NET Web Project Paths
  • 答案,如果是为 vb.net 编写的,需要一个额外的第三个右括号。我无法只用一个字符编辑答案,所以我发表评论。
【解决方案2】:

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

您的 wordDocName 是一个相对 URL。

简单使用

string fileName = Server.MapPath(wordDocName);

【讨论】:

    【解决方案3】:

    使用

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

    获取完全限定的路径。这应该对你有用。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

              【解决方案8】:

              string docname="traintatkalantnoy.txt";

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

              【讨论】:

                猜你喜欢
                • 2016-02-29
                • 2012-05-15
                • 2012-10-01
                • 2012-06-13
                • 2014-06-27
                • 2011-11-16
                • 1970-01-01
                • 2014-12-12
                相关资源
                最近更新 更多