System.IO 找不到通过 subst-command 生成的路径

Bes*_*ves 3 .net c#

语境:

  • 系统有一个硬盘和一个驱动器(“C:\”)
  • 所需路径位于 F:\eventlogging

我做了什么:

  • 我执行了 subst cmd 以生成 F:\ 驱动器(来自 C:\)

  • 添加了目录“eventlogging”

问题:

  • 在代码中,有一些部分写入 F:\eventlogging 内的文件
  • 抛出异常:System.IO.DirectoryNotFoundException:System.IO.DirectoryNotFoundException:找不到路径“F:\ eventlogging \”的一部分..

我尝试过的:

  • 在资源管理器中输入路径(转到路径)
  • 在 cmd 中 cd 到此路径也有效

附加信息:

  • 代码无法更改(许多项目的共同基础)

Gro*_*roo 5

如果您使用提升的提示符映射驱动器,则该驱动器在非管理员帐户下将不可见。

您可以以管理员身份运行程序,也可以使用管理员和非管理员帐户都可见的不同方法。这涉及将以下项添加到注册表中(将以下行复制/粘贴到文件中"temp.reg",然后双击它):

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"F:"="\\??\\C:"
Run Code Online (Sandbox Code Playgroud)

额外的好处是这种方法在重新启动后仍然有效。

注意:如果您打算使用 regedit.exe 手动添加密钥,请不要转义反斜杠(即将上面表达式中的每个反斜杠替换为\\\,并且在这种情况下也没有引号(您将向密钥添加一个String ValueDOS Devices的,将名称设置为F:,将数据设置为\??\C:)

您还需要重新启动系统才能使其生效。

另外:我知道您写道代码无法更改,但仍然应该强调:使用配置文件而不是硬编码路径显然是任何应用程序的正确方法(或者更简单,将日志放置在当前的某个位置)用户AppData\Local文件夹)。使用默认设置重建这个公共基础f:\eventlogging不会破坏其他应用程序,但可以让您拥有这种灵活性。对于代码中的所有其他硬编码设置和幻数也是如此。所有日志框架都使用配置文件来配置其输出。