我在Server.MapPath()中注意到了一些奇怪的东西。如果我有一个在末尾有空格的文件夹,我会得到:
HttpException:未能映射路径。
这很好:Server.MapPath("/Folder1/Folder2/item.jpg")
这很好:Server.MapPath("/Folder1/ Folder2/item.jpg")
这很好:Server.MapPath("/Folder1/Fol der2/item.jpg")
这失败了!:Server.MapPath("/Folder1/Folder2 /item.jpg")
有人能向我解释一下,为什么在最后的空间失败了,而其他地方的空间却没有?
注:不存在任何文件夹。
发布于 2012-07-26 13:33:19
因为你不应该
不要以空格或句点结束文件或目录名。虽然底层文件系统可能支持这些名称,但Windows shell和用户界面不支持。但是,将句点指定为名称的第一个字符是可以接受的。例如,".temp“。
这个问题来自于方法FileUtil.IsSuspiciousPhysicalPath(string physicalPath, out bool pathTooLong),它做了一个比较:
string.Compare(physicalPath, Path.GetFullPath(physicalPath), StringComparison.OrdinalIgnoreCase) != 0;Path.GetFullPath()将从目录和文件名中修剪尾随空格(因为它调用了Path.NormalizePath(),因此可以这样做),例如,可以发现调用Path.GetFullPath(@"C:\Foo \Bar.txt")。由于这与包含空格的原始路径不匹配,该方法将返回true,从而将路径标识为可疑路径,然后Server.MapPath将抛出异常。
发布于 2012-07-26 08:38:30
MapPath方法将指定的相对路径或虚拟路径映射到服务器上相应的物理目录。该方法不检查其返回的路径是否有效或是否存在于服务器上。您必须使用Directory.Exists()或File.Exists()方法来检查目录或文件是否已经存在。
if (File.Exists(Server.MapPath(file)) 此外,还知道以下是该方法的固有字符:
星号(*)
问号(?)
尖括号(<或>)
逗号(,)
冒号或分号(:或;)
单引号或双引号(‘或")
右方括号()
双斜杠(/或)
希望这能有所帮助。
发布于 2012-07-26 08:23:47
编辑
设置Visual 2010,以逐步进入Microsoft .NET源代码
使用thing post,当我们使用方法server.MapPath调试.net框架代码时,我试图找出.net框架中的实际内容,我发现了从虚拟路径获得绝对路径的调用,然后抛出以下文件和框架方法
System\Web\httpserverutility.cs\1477467\httpserverutility.cs Method-MapPath -文件
\System\Web\VirtualPath.cs\1477467\VirtualPath.cs*Method*-Create -文件
-System\Web\HttpRequest.cs\1599819\HttpRequest.cs Method-MapPath 文件
但是我发现,在这种情况下,当路径为/folder2 1/ enter 2 /file.cs时,它会返回me null,而在输入/enter 1/enter 2/file.cs时不会返回空对象。
我跳到你喜欢的框架里,看看发生了什么
无论如何,好的问题..but仍然是对这个问题的回答者,只有那些在framewok中设计文件的微软人才会给出这个问题。
问题在于它无法找到具有"Folder2 ".not有效空间的文件夹,并且无法在文件系统中找到该文件夹。
基本上,在windows文件系统上找不到任何文件夹,这些文件夹在namei.即结束或开始时有sapce。
https://stackoverflow.com/questions/11665179
复制相似问题