如何正确列出目录文件?

时间:2016-02-12 18:43:45

标签: c# asp.net getdirectories

我使用下面的代码,直到我得到太多图片。所以我想在母版页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新手我还不知道这些事情通常是如何完成的。我正在学习。

3 个答案:

答案 0 :(得分:1)

基本上,你必须回顾你最初做的事情并复制功能:

select replace_recursive('from1, from2, from3', array[['from1', 'to1'], ['from2', 'to2']]);

┌───────────────────┐
│ replace_recursive │
├───────────────────┤
│ to1, to2, from3   │
└───────────────────┘

您有一个服务器端文件系统路径,您需要将其转换为URL。由于ResolveUrl("~/images/1.png") 包含文件名,并且您拥有从中获取文件的硬编码路径,因此您应该能够组合这些值:

file

将“服务器URL”转换为“浏览器URL”的额外步骤的原因是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)); } 路径对浏览器没有任何意义。由于您手动将此HTML写入响应,因此框架永远不会为您翻译该路径。

答案 1 :(得分:0)

试试这个:

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

希望有所帮助

答案 2 :(得分:0)

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

因此,请在所有图片路径上将Server.MapPath("~")替换为您的域名。