簡體   English   中英

將父文件夾權限復制到子文件

[英]Copy parent folder permissions to child files

所以,基本上,我有一個問題,這些文件要從幾層上移到文件夾中,並且出於某種原因孩子的權限不會被繼承。 據我所知,這是Windows的預期功能,但我需要使其工作不同,所以我決定這樣做:

foreach (string directory in System.IO.Directory.GetDirectories(@"path", "*", SearchOption.TopDirectoryOnly))
{
foreach (string file in System.IO.Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly))
{
    DirectorySecurity DS = System.IO.Directory.GetAccessControl(directory);
    FileSecurity FS = new FileSecurity();
    System.IO.FileInfo FI = new FileInfo(file);
    foreach (FileSystemAccessRule rule in DS.GetAccessRules(true, true, typeof(NTAccount)))
    {
        FS.AddAccessRule(rule);
    }
    FI.SetAccessControl(FS);
}
}

但是,這在執行“ fs.addaccessrule”時生成錯誤:

system.argumentexception no flags can be set

我不知道如何將權限從父文件夾移動到子文件。

這是我想出的解決方案,僅根據要使用的規則創建一個新規則並刪除繼承的標志。

foreach (string directory in System.IO.Directory.GetDirectories(@"path", "*", SearchOption.AllDirectories))
{
foreach (string file in System.IO.Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly))
{
    DirectorySecurity DS = System.IO.Directory.GetAccessControl(directory, AccessControlSections.Access);
    FileSecurity FS = new FileSecurity();
    System.IO.FileInfo FI = new FileInfo(file);
    foreach (FileSystemAccessRule rule in DS.GetAccessRules(true, false, typeof(NTAccount)))
    {
        FileSystemAccessRule nRule = new FileSystemAccessRule(rule.IdentityReference, rule.FileSystemRights, InheritanceFlags.None, rule.PropagationFlags, rule.AccessControlType);
        FS.AddAccessRule(nRule);
    }
    FI.SetAccessControl(FS);
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM