C# 由于某些文件系统权限,目录.Exist(…)失败

C# 由于某些文件系统权限,目录.Exist(…)失败,c#,impersonation,file-exists,C#,Impersonation,File Exists,我的服务器上有一个文件系统和一个特定的路径结构,由模拟用户访问 在这种情况下,用户无法检查自己的文件夹是否存在 我的文件夹结构如下所示 Base Path(only admin) +->User Profile(only admin) +->User's Area( owner user and andmin ) 例如: …\Base Path\John's Profile\John's area 在文件系统(NTFS权限)上,John只有访问权(NTFS权限)J

我的服务器上有一个文件系统和一个特定的路径结构,由模拟用户访问

在这种情况下,用户无法检查自己的文件夹是否存在

我的文件夹结构如下所示

Base Path(only admin)
   +->User Profile(only admin)
      +->User's Area( owner user and andmin )
例如:

…\Base Path\John's Profile\John's area

在文件系统(NTFS权限)上,John只有访问权(NTFS权限)
John的区域
。我需要以编程方式检查
John's area
是否存在

Directory.Exists("...some other path parts...\Base Path\John's Profile\John's Area");
如果我模拟管理员,则返回true;如果我模拟John,则返回false

我以为John可以检查自己的文件夹是否存在——因为在文件系统中,即使他无法浏览
基本路径->John的个人资料
到他的区域,他也可以直接转到
…\Base Path\John的个人资料\John的区域


他需要什么权限来检查文件夹是否存在?还是我缺少一些基本的东西?

嗯,听起来这可能是一个ASP.NET网站。如果是这样,您的应用程序将由Internet信息服务托管。因此,您必须确保系统的工作进程对该目录具有适当的权限。没有它,I/O功能将无法成功

  • IIS\u IUsr
    是我相信的用户
您必须记住,尽管它在IIS中的服务器上运行,但它没有使用登录用户。它正在使用IIS内置用户

如果这不是在IIS中托管的,那么您的模拟方法应该可以工作。确保它正确地模拟了帐户

您还可以执行如下检查以验证:

public static bool ValidateIOPermission(string path)
{
     try
     {
          if(Directory.Exist(path))
               return true;

          else { Directory.CreateDirectory(path); }
     }

     catch(Exception ex) { return false; }
}

因此,如果它存在,它将
返回true
;如果没有,它将尝试写入目录。如果写入失败,它将
抛出异常
,返回一个
false
。这样您就知道它是否失败了。

您确定
…\
有效吗?我知道这在Windows XP中是可行的,但我不太确定Windows的最新版本。也许可以试试
。\..\
来代替。这里的点只是为了掩盖不必要的路径。为了直观起见。只是一个想法:也许你应该以不同的方式访问当前用户文件夹,而不是通过基本路径?想一些类似的东西。谢谢你的想法,但我实际上并没有浏览那些文件夹。我只是想把事情说清楚。在windows上,如果我通过这些路径,它将失败,但我可以直接跳转到完整路径。但从编程角度看,我无法检查完整路径是否存在。我的水晶球显示用户帐户在父目录上没有“列表文件夹内容”。是的,它是一个mvc web应用程序。但是,当我模拟管理员时,它成功了,尽管它使用了
IIS\u IUsr
内置用户(如果不管我模拟谁,它都像你说的那样使用内置用户),这不是有点奇怪吗?如果你不能
写入
,显然模拟不正确。谁说我不能写入目录?