C# Server.MapPath()返回与DirectoryInfo一起使用时不存在的路径

C# Server.MapPath()返回与DirectoryInfo一起使用时不存在的路径,c#,asp.net,iis,C#,Asp.net,Iis,我在IIS6中设置了一个虚拟目录。这映射到共享网络驱动器 我可以使用 string mappedPath = HttpContext.Current.Server.MapPath(path); 然后我创建了一个DirectoryInfo对象,因为我想在该目录中查找一些文件 DirectoryInfo updateDirectory = new DirectoryInfo(mappedPath); 但是updateDirectory.Exists为false??我可以从mappedPath中获

我在IIS6中设置了一个虚拟目录。这映射到共享网络驱动器

我可以使用

string mappedPath = HttpContext.Current.Server.MapPath(path);
然后我创建了一个DirectoryInfo对象,因为我想在该目录中查找一些文件

DirectoryInfo updateDirectory = new DirectoryInfo(mappedPath);
但是
updateDirectory.Exists
为false??我可以从
mappedPath
中获取字符串,然后复制到Start->Run中,以获得该路径,这样我就知道它存在。我正在使用集成的windows身份验证对Web服务进行身份验证,并拥有对必要文件夹的权限


代码中是否有明显的遗漏?或者这纯粹是IIS等的设置和配置?

您需要检查您的服务工作流程帐户是否具有该文件夹的访问权限。AFAIK windows身份验证不会将模拟带入工作进程,因此它可能与您的windows帐户不同。
或者(只是为了证明帐户问题),您可以使用您的帐户运行应用程序池,查看问题是否会消失。

根据此链接:

Server.MapPath
在对虚拟目录使用时未提供预期的输出

如果是服务器权限,并且您使用的是Windows身份验证,请确保您的配置中包含以下内容:

<identity impersonate="true" /> 

DirectoryInfo在错误条件下返回false:如果文件夹不存在;你没有权限;或者它是一个断开连接的网络文件夹


听起来像是您的ASP.NET工作进程对我的权限-模拟将解决此问题。

您还可以发布mappedPath的确切输出或值吗?我想,这可能有点问题@亚当,他说,他已经用Start->Run验证过了。@Adam:是的,我可以按说明手动验证above@Kangkan:输出为“\\\\someserver\\somepath”,这是正确的并且存在,但是当我创建DirectoryInfo对象时,它为exists属性返回False。是否对目录进行任何更改
DirectoryInfo
缓存信息,因此
.Exists
在您调用它时可能不正确。@Adam:事实上,这是一个很好的观点,我已经读过这篇文章了-它会缓存,因此如果您在调用Exists后创建目录,您需要创建DirectoryInfo的新实例并再次检查Exists。但这里的情况并非如此。。。做的很好,谢谢你。酷,所以我可以记住一些从做ASP.NET!Windows身份验证应用于当前用户主体,但您需要手动升级工作进程。