Мне нужно заменить все файлы в одном каталоге резервными файлами в другом каталоге. ВСЕ свойства файла/разрешения/права собственности должны быть сохранены. File.Copy, как и проводник Windows, копирует файлы, очищает все разрешения и меняет владельца.Как скопировать файл и сохранить право собственности?
Я нашел пример на SO, которые должны сохранять свои первоначальные разрешения, но не делает: Copy a file with its original permissions
Код:
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, но сохраняются только разрешения, а не права собственности. Я местный администратор, и даже когда пункт назначения - это мой локальный компьютер, он не работает. И я запускаю Visual Studio 2010 в качестве администратора.
Спасибо, что привело меня в правильном направлении. – MDave