Header

Thursday, 8 November 2012

How to copy files between two SiteCollection


Public Function MoveListItemsSiteToSite(sourceSiteURL As String, sourceList As String, destinationSiteURL As String, destinationList As String, retainMeta As Boolean) As Boolean
        Using sourceSite As New SPSite(sourceSiteURL)
            Using sourceWeb As SPWeb = sourceSite.OpenWeb()
                sourceWeb.AllowUnsafeUpdates = True
                ' Get your source library
                Dim source As SPList = sourceWeb.Lists(sourceList)
                ' Get the collection of items to move, use source.GetItems(SPQuery) if you want a subset
                Dim items As SPListItemCollection = source.Items
                Dim fileCount As Integer = 0
                Using destSite = New SPSite(destinationSiteURL)
                    Using destinationWeb = destSite.OpenWeb()
                        destinationWeb.AllowUnsafeUpdates = True
                        ' get destination library
                        Dim destination As SPList = destinationWeb.Lists(destinationList)
                        ' Get the root folder of the destination we'll use this to add the files
                        Dim destinationFolder As SPFolder = destinationWeb.GetFolder(destination.RootFolder.Url)
                        ' Now to move the files and the metadata
                        For Each item As SPListItem In items
                            'Get the file associated with the item
                            Dim file As SPFile = item.File
                            ' Create a new file in the destination library with the same properties
                            Dim newFile As SPFile = destinationFolder.Files.Add(destinationFolder.Url + "/" + file.Name, file.OpenBinary(), file.Properties, True)
                            If retainMeta Then
                                Dim newItem As SPListItem = newFile.Item
                                WriteFileMetaDataFiletoFile(item, newItem)
                            End If
                            file.Delete()
                            fileCount += 1
                        Next
                        destinationWeb.AllowUnsafeUpdates = False
                    End Using
                End Using
                sourceWeb.AllowUnsafeUpdates = False
                Return True
            End Using
        End Using
    End Function
    Public Shared Sub WriteFileMetaDataFiletoFile(sourceItem As SPListItem, destinationItem As SPListItem)
        destinationItem("Editor") = sourceItem("Editor")
        destinationItem("Modified") = sourceItem("Modified")
        destinationItem("Modified By") = sourceItem("Modified By")
        destinationItem("Author") = sourceItem("Author")
        destinationItem("Created") = sourceItem("Created")
        destinationItem("Created By") = sourceItem("Created By")
        destinationItem.UpdateOverwriteVersion()
    End Sub

No comments:

Post a Comment