【问题标题】:How to properly list files of a directory?如何正确列出目录的文件?
【发布时间】:2016-02-12 18:43:44
【问题描述】:

我一直在使用下面的代码,直到我得到太多图像。所以我想在母版页cs文件类中创建一个方法来为我生成HTML。

<img src="<%= ResolveUrl("~/images/1.png") %>">

但只要我得到很多图像,我就编写了这个方法来生成 HTML:

public void GenerateSlideItems()
        {
            string[] files = Directory.GetFiles(Server.MapPath("~/images"));
            foreach(string file in files)
            {
                string filename = Path.GetFileNameWithoutExtension(file);
                Response.Write(string.Format(
                                            "<img src=\"{0}\"  class=\"img-responsive\" alt=\"{1}\">",
                                            file, filename));
            }
        }

但我得到的图像类似于C:\...\visual studio\project\etc\1.png 而不是http:\\localhost:5090\images\1.png 我该怎么做?我也尝试了使用和不使用ResolveUrl(),但它最终返回了类似C:\images\1.png 的东西,这显然不是我正在寻找的正确路径。我是 ASP.NET 的新手,我还不知道这些事情通常是如何完成的。我正在学习。

【问题讨论】:

  • 我没有看到您在其他示例中使用解析 URL。
  • 这是我在Server.MapPath() 之前尝试过的。实际上,我并没有将该代码放在问题中。刚刚提到我也这样做了

标签: c# asp.net getdirectories


【解决方案1】:

基本上,您必须回顾您最初所做的并复制功能:

ResolveUrl("~/images/1.png")

你有一个服务器端文件系统路径,你需要把它变成一个 URL。由于file 包含文件名,并且您有一个硬编码路径,您可以从其中获取文件,您应该能够组合这些值:

var root = "~/images"
string[] files = Directory.GetFiles(Server.MapPath(root));
foreach (var file in files)
{
    var filename = Path.GetFileName(file);
    var filenameWithoutExtension = Path.GetFileNameWithoutExtension(file);

    var serverUrl = string.Format("{0}/{1}", root, filename);
    var browserUrl = ResolveUrl(serverUrl);
    // now you should be able to use browserUrl in your manually-built HTML...

    Response.Write(string.Format(
                                "<img src=\"{0}\" class=\"img-responsive\" alt=\"{1}\">",
                                browserUrl, filenameWithoutExtension));
}

将“服务器 URL”转换为“浏览器 URL”的额外步骤的原因是,~ 路径对浏览器没有任何意义。而且由于您手动将此 HTML 写入响应,因此框架永远没有机会为您翻译该路径。

【讨论】:

  • 如果我在 Visual Studio 中使用它会有所不同吗?即,而不是将文件复制到 IIS 的 www 文件夹,我通过在我的 ASP.NET webForm 项目上按 F5 从 Visual Studio 构建它。我将根路径与c:\..\physical\path\to\1.png 结合起来,如下所示:\images\c:\..\physical\path\to\1.png
  • Directory.GetFiles 返回完整路径而不仅仅是文件名,需要从该循环调用 Path.GetFileName
  • @Jack:这没什么区别。但史蒂夫随后的评论确实如此。我已经相应地更新了代码。基本上,为了在网站上使用,路径必须是“URL”路径,而不是文件系统路径。
  • 我知道我必须将它从文件系统路径转换为 ​​Url,但我没能做到。我尝试了您的代码,但它的作用是将路径与完整路径文件名连接起来并返回。我只尝试了ResolveUrl(file),它返回物理文件路径而不是 URL
  • @Jack:您尝试过答案的更新版本吗?在连接这些值之前,您需要使用 Path.GetFileName()
【解决方案2】:

试试这个:

HttpContext.Current.Server.MapPath("~/images");

希望有帮助

【讨论】:

    【解决方案3】:

    您有网站的基本路径:Server.MapPath("~");

    所以在你所有的图片路径上用你的域名替换Server.MapPath("~")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 2012-01-28
      • 2011-03-13
      • 1970-01-01
      相关资源
      最近更新 更多