移动应用目标权限的同一卷上的文件夹



使用.NET DirectoryInfo.MoveTo将同一卷(例如c:)上的目录从一个文件夹复制到另一个文件夹时,将保留访问控制权:换句话说,目标具有相同的安全性。目标具有原始安全性,并且不继承其新父级的目录。

我希望能够移动文件夹及其内容,但将权限替换为文件夹的副本。

有没有一种简单的方法可以在C#中实现这一点?

const string source = @"C:test1test";
const string target = @"C:test2test";
Directory.Move(source, target);
// Get Directory Info
var dInfo = new DirectoryInfo(target); // Or FileInfo
var dSec = dInfo.GetAccessControl();
// Set Security to inherit
dSec.SetAccessRuleProtection(false, false);
// Remove Rules/Accounts that are not inherited
var rules = dSec.GetAccessRules(true, false, typeof (NTAccount));
foreach (FileSystemAccessRule rule in rules)
    dSec.RemoveAccessRule(rule);
// Commit changes to folder
dInfo.SetAccessControl(dSec);

首先移动文件夹。然后创建DirectoryInfo并获取AccessControl。使用SetAccessRuleProtection,您可以重置并从父级继承安全性。然后删除所有未继承的帐户/用户。最后一行是提交更改。

文件:我的文件夹包含文件和其他文件夹,这取决于它们的安全设置。如果它们也设置为继承,那么它们将从用上面的代码更改的文件夹(父文件夹)继承因此,如果你不确定它们可能被设置为什么,你必须对所有子文件夹和所有文件进行递归。。。

文件的代码是相同的,除了DirectoryInfo,你必须使用FileInfo。

有关详细信息,请访问文件。移动是否从目标目录继承权限?//我的链接,稍后阅读:http://support.microsoft.com/kb/320246/de

最新更新