2011-04-27 85 views
0

我的应用程序可以接受文件名中带有空格的上传文件。问题是当我生成超链接到这些文件时,其文件名中的空间确实阻止我这样做。如何在上传文件名中解决空间问题

DirectoryInfo di = new DirectoryInfo("e:/asdf"); 
FileInfo[] rgFiles = di.GetFiles("*.*"); 
if (rgFiles != null) 
{ 
    sb.Append("<span class='SubTitle'>Your attachments list:</span>"); 
    foreach (FileInfo fi in rgFiles) 
    { 
     sb.Append("<br><a href=e:\\asdf\\" + fi.Name + ">" + fi.Name + "</a>"); 
    } 
} 
else 
{ 
    sb.Append("You don't have any attachment yet."); 
} 

应该把所有的空格都替换下划线?那么,我不喜欢这种方式。但是,如果我想向fi.name添加引号,则不会显示任何文件名。

+0

你能否澄清一点更多:为什么你不能在网址中添加引号? I.e .:'sb.Append(“
" + fi.Name + "”);'(注意单引号) – Groo 2011-04-27 20:17:03

回答

1

你应该把周围的整个URL报价:

foreach (FileInfo fi in rgFiles) 
{ 
    sb.Append("<br><a href='e:\\asdf\\" + fi.Name + "'>" + fi.Name + "</a>"); 
} 

这样一来,如果路径中有空格,生成的HTML看起来像这样:

<br><a href='e:\asdf\your file name.txt'>your file name.txt</a> 
+0

该死的,我应该把报价加到正确的地方,这是我在之前添加的,这就是为什么它没有显示我在帖子中说过的任何东西。你摇滚!人。 – 2011-04-27 20:22:40

0

HTML中的空格可以表示为%20。尝试用它替换它们。

但理想情况下,您应该使用XML/HTML解析器来避免名称。

+0

不工作的人,将空格替换为%20后,仍然无法找到文件。 – 2011-04-27 20:19:01

1

只是UrlEncode的文件名。它将用有效的URL替代空格(%20+)。

sb.FormatAppend("<br><a href=e:\\asdf\\{0}>{1}</a>", 
       HttpUtility.UrlEncode(fi.Name), 
       fi.Name); 
+0

Dude,它不起作用,例如文件名“CC AP和Svc Pkg-FCRA March 2011.pdf”将被编码为“CC + AP +和+ Svc + Pkg-FCRA + March + 2011.pdf”。实际上,当您点击链接时,服务器找不到名为“CC + AP +和+ Svc + Pkg-FCRA + March + 2011.pdf”的文件。 – 2011-04-27 20:14:47

+0

@Steven - 您似乎试图访问本地文件。你为什么不使用['file://'URI方案](http://en.wikipedia.org/wiki/File_URI_scheme)? – Oded 2011-04-27 20:18:59

+0

实际上,该位置在另一台服务器中,我映射了路径。但它与文件名无关。无论如何,感谢您的帮助。 – 2011-04-27 20:24:47

相关问题