You can try this code, CopyItemPermission:
using (SPSite site = new SPSite("http://yoursite"))
{
using (SPWeb web = site.OpenWeb())
{
SPList sourceList = web.Lists.TryGetList("SourceLibrary");
SPList targetList = web.Lists.TryGetList("TargetLibrary");
SPListItem sourceItem = sourceList.GetItemById(47);
SPFolder sourceFolder = sourceItem.Folder;
string targetPath = targetList.RootFolder.ServerRelativeUrl + "/" + sourceFolder.Name;
sourceFolder.CopyTo(targetPath);
SPFolder targetFolder = web.GetFolder(targetPath);
SPListItem targetItem = targetFolder.Item;
CopyItemPermission(sourceItem, targetItem);
}
}
public static void CopyItemPermission(SPListItem SourceItem, SPListItem TargetItem)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
TargetItem.SystemUpdate();
if (SourceItem.HasUniqueRoleAssignments)
{
TargetItem.BreakRoleInheritance(true);
}
else
{
return;
//TargetItem.BreakRoleInheritance(false);
}
while (TargetItem.RoleAssignments.Count > 0)
{
TargetItem.RoleAssignments.Remove(0);
}
//copying all the permission from source item to target item
foreach (SPRoleAssignment role in SourceItem.RoleAssignments)
{
TargetItem.RoleAssignments.Add(role);
}
TargetItem.SystemUpdate(false);
});
}
Happy Coding !!!