Sharepoint 将列表项从源复制到目标时复制文件夹
这是我将列表中的文件从源复制到目标的代码。使用下面的代码,我只能复制文件,但不能复制文件夹。关于如何复制文件夹以及这些文件夹中的文件,有什么想法吗Sharepoint 将列表项从源复制到目标时复制文件夹,sharepoint,sharepoint-2007,sharepoint-api,Sharepoint,Sharepoint 2007,Sharepoint Api,这是我将列表中的文件从源复制到目标的代码。使用下面的代码,我只能复制文件,但不能复制文件夹。关于如何复制文件夹以及这些文件夹中的文件,有什么想法吗 using (SPSite objSite = new SPSite(URL)) { using (SPWeb objWeb = objSite.OpenWeb()) { SPList objSourceList = nul
using (SPSite objSite = new SPSite(URL))
{
using (SPWeb objWeb = objSite.OpenWeb())
{
SPList objSourceList = null;
SPList objDestinationList = null;
try
{
objSourceList = objWeb.Lists["Source"];
}
catch(Exception ex)
{
Console.WriteLine("Error opening source list");
Console.WriteLine(ex.Message);
}
try
{
objDestinationList = objWeb.Lists["Destination"];
}
catch (Exception ex)
{
Console.WriteLine("Error opening destination list");
Console.WriteLine(ex.Message);
}
string ItemURL = string.Empty;
if (objSourceList != null && objDestinationList != null)
{
foreach (SPListItem objSourceItem in objSourceList.Items)
{
ItemURL = string.Format(@"{0}/Destination/{1}", objDestinationList.ParentWeb.Url, objSourceItem.Name);
objSourceItem.CopyTo(ItemURL);
objSourceItem.UnlinkFromCopySource();
}
}
}
}
谢谢如果您要复制到位于同一SPWeb内的目标,您可以尝试以下操作
using (SPSite site = new SPSite("http://urltosite"))
{
using (SPWeb web = site.OpenWeb())
{
//get the folder from the source library
SPFolder sourceFolder = web.GetFolder("Documents/Folder 1");
//get the folder to the destination
SPFolder destinationFolder = web.GetFolder("New Library");
sourceFolder.CopyTo(destinationFolder.ServerRelativeUrl + "/" + sourceFolder.Name);
}
}
遗憾的是,当将文件夹复制到其他SPWeb或SPSite时,我认为这不起作用。SPList.Items只返回非文件夹项目。您可以使用SPList.Folders来迭代列表中的所有文件夹。因此,如果您使用相同的foreach循环,只使用:
foreach(objSourceList.Folders中的SPListItem objSourceFolderItem)
然后,您将获得所有文件夹。要正确移动文件夹及其所有内容,请使用objSourceFolderItem.folder.CopyTo(ItemUrl)
我尝试过使用一个只有一级文件夹的列表(将其与foreach循环配对以获取根文件夹中的所有项目),它在SP2007中对我有效。我相信SPList.Folders会获取整个列表中的所有文件夹,而不仅仅是根文件夹中的文件夹,因此,如果最终使用多级文件夹系统打破列表,那么另一种尝试方法可能是:
foreach(objSourceList.RootFolder.SubFolders中的SPFolder objSourceFolderItem)
由于这些已经是SPFolder对象,您可以只使用
objSourceFolderItem.CopyTo(ItemUrl)
这对我来说很有用。我必须将文件夹从spweb移动到另一个spweb
private static void RecursiveCopy(SPList objSourceList, SPFolder objSourceFolder, SPFolder objDestinationFolder)
{
SPListItemCollection objItems = ((SPDocumentLibrary)objSourceList).GetItemsInFolder(objSourceList.DefaultView, objSourceFolder);
foreach (SPListItem objItem in objItems)
{
//If it's a file copy it.
if (objItem.FileSystemObjectType == SPFileSystemObjectType.File)
{
byte[] fileBytes = objItem.File.OpenBinary();
string DestinationURL = string.Format(@"{0}/{1}", objDestinationFolder.Url, objItem.File.Name);
//Copy the file.
SPFile objDestinationFile = objDestinationFolder.Files.Add(DestinationURL, fileBytes, true);
objDestinationFile.Update();
}
else
{
string dirURL = string.Format(@"{0}/{1}", objDestinationFolder.Url, objItem.Folder.Name);
SPFolder objNewFolder = objDestinationFolder.SubFolders.Add(dirURL);
objNewFolder.Update();
//Copy all the files in the sub folder
RecursiveCopy(objSourceList, objItem.Folder, objNewFolder);
}
}
}
public static void CopyListItems(string SourceSiteURL, string DestinationSiteURL, string ListName)
{
string DestinationURL = string.Empty;
using (SPSite SourceSite = new SPSite(SourceSiteURL))
{
using (SPWeb SourceWeb = SourceSite.OpenWeb())
{
using (SPSite DestinationSite = new SPSite(DestinationSiteURL))
{
using (SPWeb DestinationWeb = DestinationSite.OpenWeb())
{
DestinationWeb.AllowUnsafeUpdates = true;
//Get the QA Forms Document libarary from the source web
SPList objSourceList = SourceWeb.Lists[ListName];
SPList objDestinationList = null;
try
{
objDestinationList = DestinationWeb.Lists[ListName];
}
catch
{
//Create a list in the destination web
DestinationWeb.Lists.Add(ListName, string.Empty, SPListTemplateType.DocumentLibrary);
}
objDestinationList = DestinationWeb.Lists[ListName];
//Recursively copy all the files and folders
RecursiveCopy(objSourceList, objSourceList.RootFolder, objDestinationList.RootFolder);
DestinationWeb.Update();
DestinationWeb.AllowUnsafeUpdates = false;
}
}
}
}
}
这将递归复制所有文件和文件夹
希望它能帮助别人