2014-09-10 65 views
0

在Server 2008 R2中设置预先存在的文件夹的所有者时,是否有办法将此传播到对象下的所有子容器?你可以在属性诊断中做到这一点,但我没有看到这个开关。在C#中设置目录和子容器的所有者#

我正在寻找一种方法来避免通过子容器来回收这样做。

此代码将仅切换顶级目录的所有者。

DirectoryInfo myDirectoryInfo = new DirectoryInfo("PATH HERE"); 
DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl(); 

System.Security.Principal.IdentityReference myOwner = 
    new System.Security.Principal.NTAccount("TARGET OWNER ACCOUNT"); 
myDirectorySecurity.SetOwner(myOwner); 

myDirectoryInfo.SetAccessControl(myDirectorySecurity); 

回答

0

There is no overload这将为您提供此。

但下面的代码将做到这一点:

DirectoryInfo directoryInfo = new DirectoryInfo(path); 
var directories = directoryInfo.EnumerateDirectories("*.*", SearchOption.AllDirectories); 
foreach (var directory in directories) 
{ 
    // set owner     
} 

请注意,我用EnumerateDirectories,而不是Directory.GetDirectories,它会立即返回,即使有目录的1000年。

+0

它会将它们全部返回,但是您必须在foreach语句中的每一个上设置所有者。这意味着更多的运行时间。 – Saren 2014-09-10 17:32:57

+0

此操作在Windows中需要时间,如果您关注UI冻结等,请使用Progress 异步运行方法并报告进度。 – Aybe 2014-09-10 17:58:39