2014-10-27 104 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