2017-02-15 69 views
0

我正在掃描文件夾中的文件,我需要以任何方式獲取當前用戶的每個文件的權限以表示爲字符串。 因此,對於附加文件的屬性,我想代表f-m-r-w 字符串。獲取當前用戶的文件權限.net

我試圖在我這樣的掃描循環中完成此操作,但獲取空字符串。你能暗示我應該從哪裏出發或選擇另一種方法?提前致謝!

  string permissionShort = string.Empty; 
      DirectorySecurity dSecurity = Directory.GetAccessControl(_directory.FullName); 
      foreach (FileSystemAccessRule rule in dSecurity.GetAccessRules(true, true, typeof(NTAccount))) 
      { 
       if (rule.FileSystemRights == FileSystemRights.Write) 
        permissionShort = permissionShort + "x"; 
       if (rule.FileSystemRights == FileSystemRights.Read) 
        permissionShort = permissionShort + "x"; 
       if (rule.FileSystemRights == FileSystemRights.AppendData) 
        permissionShort = permissionShort + "x"; 
       if (rule.FileSystemRights == FileSystemRights.Modify) 
        permissionShort = permissionShort + "x"; 
       if (rule.FileSystemRights == FileSystemRights.ExecuteFile) 
        permissionShort = permissionShort + "x"; 
      } 
+0

大概應該是副本http://stackoverflow.com/questions/1339976/how-to-check-if-any-flags-of-a-flag-combination-are-set的,但需要一些調整問題...所以只是評論,而不是VTC。 –

回答

0

FileSystemRights是一個被標記的枚舉,這意味着必須執行與操作,以測試枚舉的單個值。

string scanPath = @"C:\Test"; 
    string permissionShort = string.Empty; 
    DirectorySecurity dSecurity = Directory.GetAccessControl(scanPath); 
    foreach (FileSystemAccessRule rule in dSecurity.GetAccessRules(true, true, typeof(NTAccount))) 
    { 
     permissionShort += rule.FileSystemRights.ToString() + " : "; 
     permissionShort += ((rule.FileSystemRights & FileSystemRights.FullControl) == FileSystemRights.FullControl) ? "f" : "-"; 
     permissionShort += ((rule.FileSystemRights & FileSystemRights.Write)== FileSystemRights.Write) ? "w" : "-"; 
     permissionShort += ((rule.FileSystemRights & FileSystemRights.Read) == FileSystemRights.Read) ? "r" : "-"; 
     permissionShort += ((rule.FileSystemRights & FileSystemRights.AppendData) == FileSystemRights.AppendData) ? "a" : "-"; 
     permissionShort += ((rule.FileSystemRights & FileSystemRights.Modify) == FileSystemRights.Modify) ? "m" : "-"; 
     permissionShort += ((rule.FileSystemRights & FileSystemRights.ExecuteFile) == FileSystemRights.ExecuteFile) ? "e" : "-"; 
     permissionShort += "\n"; 
    } 
+0

謝謝。它工作但給3次結果,我懷疑它計算了系統上的所有帳戶。 – Madcode