C# ASP.NET文件浏览器路径转换

C# ASP.NET文件浏览器路径转换,c#,.net,asp.net,file-browser,C#,.net,Asp.net,File Browser,我正在使用一个asp.net文件浏览器,它递归地遍历文件夹并列出它们的文件和子文件夹。然而,我也希望能够下载/查看这些文件,我似乎遇到了问题。我找不到正确的地址翻译。我有以下配置和代码 编辑: 问题是创建的链接 Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>"); Response.Write(空格+“”); 不要正确链接到该文件。

我正在使用一个asp.net文件浏览器,它递归地遍历文件夹并列出它们的文件和子文件夹。然而,我也希望能够下载/查看这些文件,我似乎遇到了问题。我找不到正确的地址翻译。我有以下配置和代码

编辑

问题是创建的链接

Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>");
Response.Write(空格+“
”);
不要正确链接到该文件。还有一个我需要解决的额外问题:一些文件名包含空格

Web.config

<appSettings>
  <add key="UploadDirectory" value="~/Upload/"/>
</appSettings>

”; printDir(space+“”,dir+“\\”+d.ToString()); } foreach(di.GetFiles()中的FileInfo d) { 响应。写入(空格+“
”); } } }
您尝试过类似的方法吗

foreach (FileInfo d in di.GetFiles())
{
    Response.Write(space + "<a href=" + Server.MapPath("~/Upload/") + d.Name + ">" + d.FullName + "</a><br/>");
}
foreach(di.GetFiles()中的FileInfo d)
{
响应。写入(空格+“
”); }
问题在于,在呈现子文件夹中文件的路径时,您使用的路径类似于“Upload/filename”;这是不正确的

事实上,您应该尝试从当前di变量获取目录名。也就是说,如果您当前正在“Upload”文件夹中浏览“Inner”文件夹,则您的路径类似于“Upload/Inner/filename”

这是您需要进行更改的地方:

  Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>");
Response.Write(空格+“
”);
在上面的代码行中,您需要根据di变量中的路径动态创建href URL。请执行以下操作:

  • 获取di路径
  • 获取di路径中“\Upload”后的子字符串
  • 将上面的子字符串拆分为“\”,这将为您提供任何子目录
  • 使用上述子目录创建文件的新路径

  • 我希望这能有所帮助。

    这更具可读性:

    foreach (FileInfo d in di.GetFiles("*", SearchOption.AllDirectories)) // includes subfolders
    {
        Response.Write(String.Format("{0}<a href=\"{1}\">{2}</a>", space, Server.MapPath("~/Upload/") + d.Name, d.FullName);
    }
    
    foreach(di.GetFiles(“*”,SearchOption.AllDirectories中的FileInfo d))//包括子文件夹
    {
    Write(String.Format(“{0}”、空格、Server.MapPath(“~/Upload/”)+d.Name、d.FullName);
    }
    

    另外,请尝试链接。我现在编辑了问题以使其更清晰。对不起,我认为Chuck的回答解决了您的第一个问题,如果W文件路径有空格,则url编码,然后url解码以使用。您有什么问题?您想点击右键下载文件吗?谢谢您的帮助。是的,我有,但似乎没有rk.@Teletha:看到我的答案了吗?如何包含子文件夹
    foreach (FileInfo d in di.GetFiles("*", SearchOption.AllDirectories)) // includes subfolders
    {
        Response.Write(String.Format("{0}<a href=\"{1}\">{2}</a>", space, Server.MapPath("~/Upload/") + d.Name, d.FullName);
    }