如何使用System.IO.DirectoryInfo访问映射的网络驱动器?

时间:2008-09-25 14:24:27

标签: c# .net

我需要在映射的网络驱动器上创建一个目录。我正在使用代码:

DirectoryInfo targetDirectory = new DirectoryInfo(path);
if (targetDirectory != null)
{
    targetDirectory.Create();
}

如果我指定“\\\\ ServerName \\ Directory”之类的路径,那么一切都会好的。如果我将“\\ ServerName \ Directory”映射为驱动器Z:,并指定路径“Z:\\”,则会失败。

创建targetDirectory对象后,VS显示(在调试模式下)targetDirectory.Exists = false,并且尝试执行targetDirectory.Create()会抛出异常:

System.IO.DirectoryNotFoundException: "Could not find a part of the path 'Z:\'."

但是,相同的代码适用于本地目录,例如: C:

该应用程序是Windows服务(WinXP Pro,SP2,.NET 2),与映射驱动器的用户在同一帐户下运行。 Qwinsta回复用户的会话是会话0,因此它与服务的会话是相同的。

7 个答案:

答案 0 :(得分:49)

映射的网络驱动器是特定于用户的,因此如果应用程序以与创建映射驱动器号(z :)的用户不同的身份运行,则它将无效。

答案 1 :(得分:13)

根据事实,映射的驱动器号不起作用,简单的解决方案是键入完整的网络路径。

阿卡,

我的R:/广告已映射到\\myserver\files\myapp\

使用

代替

"R:/" + "photos"

使用

"\\myserver\files\myapp\" + "photos"

答案 2 :(得分:4)

您的应用程序运行的帐户可能无法访问映射的驱动器。如果这是一个Web应用程序,那肯定是问题...默认情况下,Web应用程序在NETWORK SERVICE帐户下运行,该帐户不会设置任何映射驱动器。尝试使用模拟来查看它是否解决了问题。虽然您可能需要找出更好的解决方案,然后才使用模拟。如果是我,我会坚持使用UNC路径。

答案 3 :(得分:3)

您是否使用与运行程序完全相同的凭据进行映射?

答案 4 :(得分:1)

您可以尝试使用WNetConnection将映射驱动器解析为网络路径。

答案 5 :(得分:1)

你在Vista / Server 2k8上运行吗?这两个将服务隔离到会话0和第一个交互会话是会话1.在会话隔离上有更多信息here。因此,即使它是用于服务和交互式登录的同一用户,它也将是不同的会话。

答案 6 :(得分:0)

我在Win Server 2012上遇到了同样的问题。禁用UAC解决了它。