使用 .NET DirectoryInfo.MoveTo 将同一卷上的目录(例如 c:)从一个文件夹复制到另一个文件夹时,会保留访问控制:换句话说,目标具有与源相同的安全性,并且不继承其中一位是新父母。
我希望能够移动文件夹及其内容,但替换权限,就像它是文件夹的副本一样。
有没有一种简单的方法可以在 C# 中实现这一点?
使用 .NET DirectoryInfo.MoveTo 将同一卷上的目录(例如 c:)从一个文件夹复制到另一个文件夹时,会保留访问控制:换句话说,目标具有与源相同的安全性,并且不继承其中一位是新父母。
我希望能够移动文件夹及其内容,但替换权限,就像它是文件夹的副本一样。
有没有一种简单的方法可以在 C# 中实现这一点?
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 不从目标目录继承权限? // 链接给我,稍后阅读:http: //support.microsoft.com/kb/320246/de