2017-10-11 4 views
0

基本的に私は、これらのファイルがいくつかの理由で継承されておらず、いくつかのレイヤからフォルダに移動さ​​れるという問題があります。子フォルダへの親フォルダのアクセス権のコピー

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 

親フォルダから子ファイルへのアクセス許可をどのように移動するのか分かりません。

答えて

0

これは私が思いついた解決策です。継承したフラグを使用して削除するルールに基づいて新しいルールを作成するだけです。

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); 
} 
} 
関連する問題