2014-10-27 44 views
1

我的服务器上有一个文件系统和特定的路径结构,可供模拟用户访问。Directory.Exist(...)由于某些文件系统权限而失败

存在用户无法检查自己的文件夹存在的情况。

我的文件夹结构如下。

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

举个例子:

... \基本路径\约翰的个人资料\约翰的区域

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

Directory.Exists("...some other path parts...\Base Path\John's Profile\John's Area"); 

如果我模拟管理员,则返回true,但如果我模拟John,则返回false。

我以为约翰能够检查自己的文件夹存在 - 因为在文件系统中,即使他不能通过Base Path -> John's Profile浏览到他的区域,他可以直接去...\Base Path\John's Profile\John's Area

他需要检查文件夹存在的权限?或者我有什么基本缺失?

+0

你确定'... \'有效吗?我知道这将在Windows XP中起作用,但我不确定更新版本的Windows。也许试试'.. \ .. \'。 – stakx 2014-10-27 14:36:18

+0

这些点只是掩盖了不必要的路径。为了视觉。 – 2014-10-27 14:40:04

+0

只是一个想法:也许你应该以不同的方式访问当前用户文件夹,而不是通过基本路径?思考类似[this](http://stackoverflow.com/a/1141813/1997232)。 – Sinatr 2014-10-27 15:01:10

回答

0

好吧,这听起来像这可能是一个ASP.NET网站。如果是这种情况,您的应用程序将由Internet信息服务托管。所以你必须确保系统的工作进程对目录具有适当的权限。没有它,I/O函数将不会成功。

  • IIS_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; } 
} 

所以,如果它存在,它将return true;如果它不尝试写目录。那么它会throw exception,如果它写不出来,返回false。所以你会知道它是否失败。

+0

是的,它是一个mvc网络应用程序。但是,当我冒充管理员时,尽管它使用用户中构建的“IIS_IUsr”(如果不管我假冒它的人是否使用内置用户,如你所说),它是否会有点奇怪? – 2014-10-27 14:44:20

+0

如果你不能'写'到目录,显然是不正确的模拟。 – Greg 2014-10-27 14:48:58

+0

谁说我不能写入目录? – 2014-10-27 14:54:54