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

时间:2013-08-05 11:09:05

标签: c# filesystems

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

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

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

1 个答案:

答案 0 :(得分:0)

const string source = @"C:\test1\test";
const string target = @"C:\test2\test";
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。

有关详细信息,请访问File.Move does not inherit permissions from target directory? //链接给我,稍后阅读:http://support.microsoft.com/kb/320246/de