C# 如何复制文件并保留所有权?

C# 如何复制文件并保留所有权?,c#,copy,file-permissions,file-copying,C#,Copy,File Permissions,File Copying,我需要将一个目录中的所有文件替换为另一个目录中的备份文件。必须保留所有文件属性/权限/所有权。复制,就像Windows资源管理器一样,复制文件,清除所有权限,并将所有者更改为我自己 我在上找到了一个示例,该示例应保留其原始权限,但不会: 守则: File.Copy(originFile, destinationFile); FileInfo originFileInfo = new FileInfo(originFile); FileInfo destinationFileInfo = new

我需要将一个目录中的所有文件替换为另一个目录中的备份文件。必须保留所有文件属性/权限/所有权。复制,就像Windows资源管理器一样,复制文件,清除所有权限,并将所有者更改为我自己

我在上找到了一个示例,该示例应保留其原始权限,但不会:

守则:

File.Copy(originFile, destinationFile);
FileInfo originFileInfo = new FileInfo(originFile);
FileInfo destinationFileInfo = new FileInfo(destinationFile);
FileSecurity ac1 = originFileInfo.GetAccessControl(AccessControlSections.All);
ac1.SetAccessRuleProtection(true, true);
destinationFileInfo.SetAccessControl(ac1);
我有一个隐私权:

The process does not possess the 'SeSecurityPrivilege' privilege which is required for this operation.
如果禁用UAC,则会出现以下错误:

The security identifier is not allowed to be the owner of this object.

我在AccessControlSections.All和AccessControlSections.Owner中遇到此异常。如果我将枚举更改为AccessControlSections.Access,则代码可以工作,但只保留权限,而不保留所有权。我是一个本地管理员,即使目标是我的本地PC,它也不能工作。我以管理员身份运行Visual Studio 2010。

您可能需要明确获得“安全特权”。也许最简单的方法就是使用


我没有权限对不在本地计算机上的任何文件调用GetAccessControl(第一个错误),并且我无法设置我拥有的任何文件的所有者(第二个错误),我只能授予“获取所有权”权限。作为域管理员运行该工具解决了所有问题

// Untested code, but it might look like this...
// (Add exception handling as necessary)
Process process = Process.GetCurrentProcess();

using (new PrivilegeEnabler(process, Privilege.Security))
{
    // Privilege is enabled within the using block.
    File.Copy(originFile, destinationFile);
    FileInfo originFileInfo = new FileInfo(originFile);
    FileInfo destinationFileInfo = new FileInfo(destinationFile);
    FileSecurity ac1 = originFileInfo.GetAccessControl(AccessControlSections.All);
    ac1.SetAccessRuleProtection(true, true);
    destinationFileInfo.SetAccessControl(ac1);
}