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

33 .net c#

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

DirectoryInfo targetDirectory = new DirectoryInfo(path);
if (targetDirectory != null)
{
    targetDirectory.Create();
}
Run Code Online (Sandbox Code Playgroud)

如果我指定"\\\\ 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:\'."
Run Code Online (Sandbox Code Playgroud)

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

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

Kev*_*Kev 52

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


Doo*_*ght 13

基于这个事实,映射的驱动器号不起作用,简单的解决方案是键入完整的网络路径.

阿卡,

我的R:/驱动器已映射到\\myserver\files\myapp\

所以不要使用

"R:/" + "photos"

使用

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

  • 使用完整网络路径的一个问题是它增加了文件路径的长度,使得"R:\ ...\FileA.txt"可用于复制,删除等,但"\\ myserver\files\myapp由于路径太长,\ ...\FileA.txt"可能会失败. (2认同)

Eri*_*oss 5

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

  • UNC 路径是对我有用的快速解决方案。对于那些不知道的人,这是这样的路径: \\server1\folder1\folder2\file.pdf - 请记住,对于 ac# 字符串,您需要像这样转义反斜杠 \\\\server1 (4认同)

fhe*_*fhe 1

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