我需要用另一个目录中的备份文件替换一个目录中的所有文件。必须保留所有文件属性/权限/所有权。File.Copy 就像 Windows 资源管理器一样,复制文件,清除所有权限,并将所有者更改为我自己。
我在 SO 上找到了一个示例,它应该保留其原始权限但不:复制具有原始权限的文件
编码:
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);
我得到一个 PrivilegeNotHeldException:
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。