使用 System.IO.Directory.CreateDirectory 在网络驱动器中创建文件夹

Create a folder within a network drive with System.IO.Directory.CreateDirectory

在我的本地计算机上,我创建了指向 \MyComputerName\D.

的网络驱动器 D:/

在我的本地磁盘上 C:/ 我创建了一个名为 D 的文件夹,并配置了一个网络共享,该共享上的每个人都有权访问。

然后我开始Windows PowerShell ISE。我的工作目录是 C:\Users\username

之后,我在这个网络驱动器中使用 Powershell 创建了一个文件夹,例如

  [System.IO.Directory]::CreateDirectory("D:/Foo/Bar")

目录 Foo 及其子文件夹 Bar 将成功创建。

然后我删除 D:/ 中的 Foo 文件夹并使用管理员权限启动 Visual Studio 2019。

然后我创建一个简单的 C#.NET 控制台应用程序,例如

class Program
{
    static void Main(string[] args)
    {
        System.IO.Directory.CreateDirectory(@"D:/Foo/Bar");

    }
}

如果我 运行 控制台应用程序将不会创建目录,我得到 System.IO.DirectoryNotFoundException: 'Could not find a part of the path 'D:\Foo\Bar'.'

我应该怎么做才能使用我的简单控制台应用程序成功创建文件夹?

您可以先检查是否可以使用Directory.exists(string path)访问D盘。如果找不到,将无法创建目录。可能某处缺少权限。

从根本上说,如果您 运行 进程 提升 (作为管理员),它将 不会 看到驱动器映射你在运行宁-升高时建立。

您可以通过以下方式验证:

# Establish a (temporary) mapping; making it persistent makes no difference.
# Note: This assumes that the admin shares are turned on.
net use T: "\$(hostname)\c$\Users"

# Start a new PowerShell process *elevated* (as admin)
# You'll see that it can't find drive T:
Start-Process -Verb Runas powershell '-noprofile -c Get-ChildItem T:; pause'

# Clean up
net use T: /del

最简单的解决方法是直接使用 UNC 路径 来创建您的文件夹。

如果您不想将其硬编码到您的应用程序中,或者您不想事先为您的提升化身重新创建映射,您将不得不寻找其他方式来传达驱动器-将信息从你的非提升化身映射到你的提升化身。

如果需要查看映射驱动器的所有代码都是 运行 通过 PowerShell,解决方案是将 net use 调用放在 $PROFILE 文件.