c# - 文件系统路径和 Directory.Exists()

标签 c# .net permissions file-permissions

我对此有点不知所措......似乎无法理解发生了什么。

我有一个应用程序可以将一些文件写入配置的输出目录,但在此之前,当应用程序加载时我会这样做......

string path = ConfigurationManager.AppSettings["TempDir"];
if (!Directory.Exists(path))
    Directory.CreateDirectory(path);

我的问题是,在我的情况下,路径是基于网络的位置“\MyServer\Share”,当我使用该路径时它有效,但我使用的路径实际上是“Z:\”,因为共享是映射并自动映射到网络中的所有用户 session 中。

我想使用“Z:\”,但它不起作用并返回“全部或部分路径不存在”的错误。

我立即想到“哦,这一定是权限”,所以我检查了它是否有效并应用了相同的权限 ...

对于所有相关共享,我的用户帐户对该位置具有完全控制权限。

最初我认为它可能是这样的:Directory.Exists not getting mapped directory 但是后来我想起来不可能是这个应用程序在另一个帐户下运行,因为我检查了

  1. 它只是一个控制台应用程序
  2. 前一行是这样的:

    AppDomain.CurrentDomain.SetThreadPrincipal(new WindowsPrincipal(WindowsIdentity.GetCurrent()));
    

.. 据我了解,这样做的目的是确保应用程序域在当前 Windows 用户的上下文中运行,除非另有说明,否则包括所有“在应用程序域中创建的线程”

有什么想法吗?

编辑:

按照 Richard 的建议查看进程监视器(请参阅下面的评论)表明,如果我使用完整的 unc 路径“\MyServer\Share”,那么如果我使用映射路径“Z:\”,就会按照我的预期发出请求它仍然请求完整的 unc 路径“\MyServer\Share”(大概它正在 .net 的内部工作中进行某种形式的转换)。

所以无论我请求完整的 unc 路径“\MyServer\Share”是什么,但只有明确指定完整的 unc 路径我才能访问它......很奇怪!!!

上面发布的代码与我在我的控制台应用程序中编写的代码完全一样,除了原则性的事情之外没有其他事情发生,因为这些是在我的控制台应用程序中执行的第一行代码。

嗯……

编辑 2:

现在我真的很困惑,当在上面的配置文件请求行上放置一个断点并运行它直到断点然后清除进程监视器并跨过它并且 if 语句没有出现在进程监视器中,因为我会期望它...

为什么会这样?

最佳答案

您不能将映射驱动器用作创建共享目录所需的路径,并赋予它所需的权限(读或写),然后像这样连接到它: \ServerName\SharedDirectoryName\OneMoreDirectory

关于c# - 文件系统路径和 Directory.Exists(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6607445/

相关文章:

c# - 获取在操作中执行的方法的自定义属性

c# - Wpf(或 Windows 窗体)的 Dnx

c# - ConfigurationSection 多个枚举值

Android 的 ContextCompat.checkSelfPermission() 返回不正确的值

sockets - Nginx和uWSGI : Proper permissions setup for 502 Bad Gateway issue

c# - 如何创建每小时运行一次的线程? APS.NET WebApi

c# - 身份服务器 4 故障排除

.net - 我找不到 System.speech

c# - NAudio MeteringSampleProvider 没有触发事件?

c - 如何获取文件的扩展属性(UNIX/C)?