gpt4 book ai didi

C# 使用安全/权限设置将文件夹复制到另一个目的地

转载 作者:太空狗 更新时间:2023-10-30 00:43:20 32 4
gpt4 key购买 nike

我正在制作一个程序,它可以复制一个文件夹并将其传输到另一个位置,包括属性、权限、安全设置。

到目前为止,我可以使用归因,但在权限/安全设置方面遇到问题。这是我的代码:

Directory.CreateDirectory(Destination);
DirectoryInfo DestAttribute = new DirectoryInfo(Destination);
DestAttribute.Attributes = Source.Attributes; // Copies Attributes from Source to Dest

AuthorizationRuleCollection Rule;
DirectorySecurity DestSecurity = Source.GetAccessControl();
Rule = DestSecurity.GetAccessRules(true, true, typeof(NTAccount));
DestSecurity.AddAccessRule(Rule);
DestAttribute.SetAccessControl(DestSecurity);

有人对让它工作有任何建议吗?感谢大家的帮助。

最佳答案

MSDN: How To copy ACL information from one file to another

SetAccessControl 方法仅保留在对象创建后已修改的 DirectorySecurity 对象。如果一个 DirectorySecurity 对象没有被修改,它就不会被保存到一个文件中。因此,不可能从一个文件检索 DirectorySecurity 对象并将同一对象重新应用到另一个文件。

将 ACL 信息从一个文件复制到另一个文件:

  1. 使用 GetAccessControl 方法从源文件中检索 DirectorySecurity 对象。

  2. 为目标文件创建一个新的 DirectorySecurity 对象。

  3. 使用 的 GetSecurityDescriptorBinaryForm 或 GetSecurityDescriptorSddlForm 方法源 DirectorySecurity 对象以检索 ACL 信息。

  4. 使用 SetSecurityDescriptorBinaryForm 或 SetSecurityDescriptorSddlForm 方法将在步骤 3 中检索到的信息复制到目标 DirectorySecurity 对象。

  5. 使用 SetAccessControl 方法将目标 DirectorySecurity 对象设置为目标文件。

例子:

DirectoryInfo dir1 = new DirectoryInfo(@"C:\Temp\Dir1");
DirectoryInfo dir2 = new DirectoryInfo(@"C:\Temp\Dir2");


DirectorySecurity ds1 = dir1.GetAccessControl();
DirectorySecurity ds2 = new DirectorySecurity();
ds2.SetSecurityDescriptorBinaryForm(ds1.GetSecurityDescriptorBinaryForm());
dir2.SetAccessControl(ds2);

关于C# 使用安全/权限设置将文件夹复制到另一个目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11533767/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com