使用 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
文件.
在我的本地计算机上,我创建了指向 \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
文件.