问题描述:
使用Server.Mappath将虚拟目录转换成实际目录时,偶尔会出现:“X:\XXX\XXX\”不是有效的虚拟目录,这样的现象。但大多数时候是正常的,不出现这样的问题。
问题背景:
Win2003 IIS6  .NET2 C#
主要出现在一个类中,此类非页面类。在页面类中调用此类实例实现一些功能。无论在类中使用HttpContext.Current.Server.Mappath,还是从页面类中传入的Server.Mappath均“偶尔”出现“不是有效的虚拟目录”这样的错误。请问:
为何如此?
当如何解决?

解决方案 »

  1.   

    补充:
    1、Mappath参数,绝对正确—有跟踪
    2、有时Mappath出现的虚拟目录会这样:C:\Windows\System32\inetsrv\~\XXX\XXX
    3、有时Mappath转换出来的虚拟目录是正确的,但还是产生了错误:不是有效的虚拟目录有时!!!!
      

  2.   

    用相对路径可以吗?
    Server.Mappath(直接写跟目录路径/xxx/xx)
    -------
    你的问题是 个别地方需要加//
      

  3.   

    再补充:此类中,需要Mappath转换的就两个地址,
    传入Mappath的参数没有任何问题同样的参数,“有时”有问题而已!
      

  4.   

    C:\Windows\System32\inetsrv\~
    ~这个都出来了?你参数怎么传的?Server.MapPath()只接受Html相对路径,返回映射的虚拟目录试试
    HttpContext.Current.Request.CurrentExecutionFilePath;  //当前执行文件的虚拟路径(如www.123.com/test.aspx不含参数名)
    System.IO.Path.GetDirectoryName(Page.Request.PhysicalPath)  //当前执行文件的目录(不含文件名)
      

  5.   

    使用 AppDomain.CurrentDomain.BaseDirectory 方式  替换 mappath
      

  6.   

    Server.Mappath找相对路径  别给绝对的 
      

  7.   

    无法使用AppDomain.CurrentDomain.BaseDirectory,因为这是两个虚拟目录(不在网站主目录里)
    Server.Mappath("~/PageConfig/")

    Server.Mappath("~/PageTemplate/")就是上面这两个东西,“偶尔“出现错误,”大多“不出现,即,1/N的人会看到错误页面。---------------------------------------------------
    另,最近用VC写ISAPI(网站防木马、后门用)时也发现,在类的构造函数中GetModuleFileName取得的文件的所在目录也为:C:\Windows\System32\inetsrv\站点
    但在GetFilterVersion中取得的路径是正确的。
      

  8.   

    C:\Windows\System32\inetsrv\~\XXX\XXX这种问题。还是MS路径的问题。你试着在页面head中加入<base href="你的网站" >然后Server.Mappath("PageConfig/");这样看看base的href属性