1

.NET DirectoryInfo.MoveTo を使用して、同じボリューム (例: c:) 上のディレクトリをあるフォルダーから別のフォルダーにコピーする場合、アクセス制御は維持されます。その新しい親の 1 つです。

フォルダーとそのコンテンツを移動できるようにしたいのですが、フォルダーのコピーのようにアクセス許可を置き換えます。

C#でこれを達成する簡単な方法はありますか?

4

1 に答える 1

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 を使用すると、セキュリティをリセットして親から継承できます。次に、継承されていないすべてのアカウント/ユーザーを削除します。最後の行は、変更をコミットすることです。

ファイル: フォルダーにはファイルやその他のフォルダーが含まれており、セキュリティ設定によって異なります。それらも継承するように設定されている場合、上記のコードで変更したフォルダー (親フォルダー) から継承するため、それらが何に設定されているかわからない場合は、すべてのサブフォルダーと同様に再帰的に行う必要がありますすべてのファイル...

ファイルのコードは同じですが、FileInfo を使用する必要がある DirectoryInfo を除きます。

詳細については、File.Move はターゲット ディレクトリからアクセス許可を継承しませんか? を参照してください。 // 後で読むためのリンク: http://support.microsoft.com/kb/320246/de

于 2013-08-05T11:39:49.777 に答える