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

时间:2016-07-27 06:56:11

标签: c# .net

上下文:

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

我做了什么:

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

  • 添加了目录" eventlogging"

问题:

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

我尝试了什么:

  • 在资源管理器中输入路径(转到路径)
  • cd in cmd to this path也适用

其他信息:

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

1 个答案:

答案 0 :(得分:4)

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

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

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"F:"="\\??\\C:"

其他好处是这种方法在重新启动后仍然存在。

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

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

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