Меня в основном интересует проектное решение , стоящее за этим.
справочная информация:
FileSystemInfo является базовым классом для (и только в) FileInfo и DirectoryInfo .
Оба класса реализуют GetAccessControl()
, возвращая FileSecurity или DirectorySecurity соответственно.
FileSecurity
и DirectorySecurity
оба являются производными от FileSystemSecurity - и, опять же, это единственные классы, которые делают это.
Ни FileSecurity
, ни DirectorySecurity
не объявляют какие-либо методы или свойствасвои - кроме конструкторов.
Тем не менее, FileSystemInfo
не содержит метод public FileSystemSecurity GetAccessControl()
.
Вопрос :
Может кто-нибудь пролить свет на то, почему FileSystemInfo
не делаетсодержать этот метод?
пример кода
public static void GrantFullControlToBuiltinUsers(this FileSystemInfo fileSystemInfo)
{
FileSystemSecurity acFile;
if(fileSystemInfo is DirectoryInfo)
acFile = ((DirectoryInfo) fileSystemInfo).GetAccessControl();
else
acFile = ((FileInfo)fileSystemInfo).GetAccessControl();
acFile.AddAccessRule(
new FileSystemAccessRule(GetAccountNameBuiltinUsers(),
FileSystemRights.FullControl,
AccessControlType.Allow));
if (fileSystemInfo is DirectoryInfo)
((DirectoryInfo)fileSystemInfo).SetAccessControl((DirectorySecurity)acFile);
else
((FileInfo)fileSystemInfo).SetAccessControl((FileSecurity)acFile);
}
Код далеко не красив со всеми (ненужными) приведениями в нем, и я удивился, почему библиотека была разработана таким образом.