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

Fer*_*X32 5 .net c# directory copy visual-studio-2010

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

到目前为止,我已经使用了 Attribution,但在权限/安全设置方面遇到了问题。这是我的代码:

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);
Run Code Online (Sandbox Code Playgroud)

任何人有任何建议让这个工作?谢谢大家的帮助。

小智 3

这似乎是以下内容的重复:

原来的问题...

(原始问题的代码示例)

FileInfo file1 = new FileInfo(@"c:\test.txt");
FileInfo file2 = new FileInfo(@"c:\test2.txt");
StreamReader sr1 = new StreamReader(file1.Open(FileMode.Open));
StreamWriter sw1 = new StreamWriter(file2.Open(FileMode.Create));
sw1.Write(sr1.ReadToEnd());
sr1.Close();
sw1.Close();
FileSecurity ac1 = file1.GetAccessControl();
ac1.SetAccessRuleProtection(true, true);
file2.SetAccessControl(ac1);
Run Code Online (Sandbox Code Playgroud)

我整理了以下方法,它似乎可以满足您的要求......

private static void FolderCopy(String sourceFolder, String destinationFolder)
{
    DirectoryInfo sourceDirectory = new DirectoryInfo(sourceFolder);
    DirectoryInfo destinationDirectory;

    if (!sourceDirectory.Exists)
    {
        throw new DirectoryNotFoundException("Source folder not found: " + sourceFolder);
    }

    if (!Directory.Exists(destinationFolder))
    {
        destinationDirectory = Directory.CreateDirectory(destinationFolder);
    }
    else
    {
        destinationDirectory = new DirectoryInfo(destinationFolder);
    }

    DirectorySecurity security = sourceDirectory.GetAccessControl();

    security.SetAccessRuleProtection(true, true);
    destinationDirectory.SetAccessControl(security);

    var filesToCopy = sourceDirectory.GetFiles();

    foreach (FileInfo file in filesToCopy)
    {
        String path = Path.Combine(destinationFolder, file.Name);
        FileSecurity fileSecurity = file.GetAccessControl();

        fileSecurity.SetAccessRuleProtection(true, true);

        file.CopyTo(path, false);

        FileInfo copiedFile = new FileInfo(path);

        copiedFile.SetAccessControl(fileSecurity);
    }
}
Run Code Online (Sandbox Code Playgroud)

克里斯