To copy files, folders and sub folders from one library to another library using web service we will make use of three web services.
1. Lists.asmx: To get all folders and lists.
2. DWS.asmx: To create folders
3. Copy.aspx: To copy files from one library to another
Add above mentioned web refrences to your project.
Sample Project
Below is the function to copy All files, Folders and subfolders
private void GetAllListItemsRecursively(string sourcelistname, string sourceFolderURL, string destlistname, string destFolderURL)
{
XmlNode ndListFolders = null;
XmlNode ndListItems = null;
XmlDocument xDocFolders = new XmlDocument();
XmlNode ndQueryFolders = xDocFolders.CreateNode(XmlNodeType.Element, "Query", "");
XmlNode ndViewFieldsFolders = xDocFolders.CreateNode(XmlNodeType.Element, "ViewFields", "");
XmlNode ndQueryOptionsFolders = xDocFolders.CreateNode(XmlNodeType.Element, "QueryOptions", "");
ndQueryOptionsFolders.InnerXml = @"<Folder>" + sourceFolderURL + "</Folder>";
ndQueryFolders.InnerXml = "";
ndViewFieldsFolders.InnerXml = "";
ndQueryFolders.InnerXml = "<Where><Eq><FieldRef Name='FSObjType' /><Value Type='Lookup'>1</Value></Eq></Where>";
XmlDocument xDocItems = new XmlDocument();
XmlNode ndQueryItems = xDocItems.CreateNode(XmlNodeType.Element, "Query", "");
XmlNode ndViewFieldsItems = xDocItems.CreateNode(XmlNodeType.Element, "ViewFields", "");
XmlNode ndQueryOptionsItems = xDocItems.CreateNode(XmlNodeType.Element, "QueryOptions", "");
ndQueryOptionsItems.InnerXml = @"<Folder>" + sourceFolderURL + "</Folder>";
ndQueryItems.InnerXml = "";
ndViewFieldsItems.InnerXml = "";
ndQueryItems.InnerXml = "<Where><Eq><FieldRef Name='FSObjType' /><Value Type='Lookup'>0</Value></Eq></Where>";
try
{
ndListFolders = _Lists.GetListItems(
sourcelistname,
"",
ndQueryFolders,
ndViewFieldsFolders,
null,
ndQueryOptionsFolders, null
);
ndListItems = _Lists.GetListItems(
sourcelistname,
"",
ndQueryItems,
ndViewFieldsItems,
null,
ndQueryOptionsItems, null
);
}
catch (Exception ex)
{
}
//Copy Folders
if (ndListFolders != null)
{
foreach (XmlNode node in ndListFolders.ChildNodes)
{
if (node.Name == "rs:data")
{
for (int i = 0; i < node.ChildNodes.Count; i++)
{
if (node.ChildNodes[i].Name == "z:row")
{
string newfolderName1 = node.ChildNodes[i].Attributes["ows_LinkFilename"].Value;
string rootFolder = string.Format("{0}/{1}", destFolderURL, newfolderName1);
_Dws.CreateFolder(rootFolder);
GetAllListItemsRecursively(sourcelistname, sourceFolderURL + @"\" + newfolderName1, destlistname, rootFolder);
}
}
}
}
}
//Copy Files
if (ndListItems != null)
{
foreach (XmlNode node in ndListItems.ChildNodes)
{
if (node.Name == "rs:data")
{
for (int i = 0; i < node.ChildNodes.Count; i++)
{
if (node.ChildNodes[i].Name == "z:row")
{
string filename = node.ChildNodes[i].Attributes["ows_LinkFilename"].Value;
string finalsourceFolderURL = sourceFolderURL.Replace(@"\", "/");
if (!finalsourceFolderURL.EndsWith("/"))
finalsourceFolderURL = finalsourceFolderURL + "/";
finalsourceFolderURL = siteURL + finalsourceFolderURL + filename;
string finaldestFolderURL = destFolderURL.Replace(@"\", "/");
if (!finaldestFolderURL.EndsWith("/"))
finaldestFolderURL = finaldestFolderURL + "/";
finaldestFolderURL = siteURL + finaldestFolderURL + filename;
string[] copyDest = { finaldestFolderURL };
CopyResult myCopyResult1 = new CopyResult();
CopyResult[] myCopyResultArray = { myCopyResult1 };
// string copyResult;
try
{
_Copy.CopyIntoItemsLocal(finalsourceFolderURL, copyDest, out myCopyResultArray);
}
catch (Exception exc) { }
}
}
}
}
}
}
Sample Project
Hello Guys.
ReplyDeleteWow awesome you are a very minded very nice blog for sharepoint era thanks for sharing post.
http://www.aegisisc.com/sharepoint-developers.html
Thanks in advance.