How to export all files and Folder from Document library by using CSOM
Issue:
In many cases we need to export files and Folders from Document library. But this is very time consuming activity , because either we need to open that library in Windows explorer and copy and paste all files and folder to drive , this activity will take much time at least 4 hours if documents are more for example 1000 documents or so. Or else we can open Library in Designer and export 1 by 1 files, because through designer we cannot export all files and folder at time.By using Below code you can export it within 5 minutes.
Solution:
For this I have crated CSOM code which will export al files and folder to “C:\Export” folder
You just need to crate this folder and run below code, all files and folder will be exported, and also folder structure will also get maintained.
1) Create folder namely “Export” on C drive
2) Create Console application and give SharePoint Client DLL’s Reference
3) Replace Program.cs code with below program.cs code
4) Change the below 2 lines
static string siteUrl = "https://XXXXXX/sites/teams/SP/"; >>Here give your site URL
public static string listTitle = "Docuemnts"; >>Give Document library display Name
5) Save and run f5, this make take max 5 minutes for 1500 items
6) ) It will start exporting files on Export folder
7) Done
PROGRAM.CS
USING MICROSOFT.SHAREPOINT.CLIENT;
USING SYSTEM;
USING SYSTEM.COLLECTIONS.GENERIC;
USING SYSTEM.IO;
USING SYSTEM.LINQ;
USING SYSTEM.TEXT;
USING SP = MICROSOFT.SHAREPOINT.CLIENT;
NAMESPACE EXPORTLISTITEMS
{
CLASS PROGRAM
{
STATIC STRING SITEURL = "HTTPS://XXXXXXXX/SITES/TEAMS/SP/";
PUBLIC STATIC STRING LISTTITLE = "DOCUMENTS";
PUBLIC STATIC CLIENTCONTEXT CLIENTCONTEXT = NEW CLIENTCONTEXT(SITEURL);
STATIC VOID MAIN(STRING[] ARGS)
{
SP.LIST OLIST = CLIENTCONTEXT.WEB.LISTS.GETBYTITLE(LISTTITLE);
CAMLQUERY CAML = NEW CAMLQUERY();
FOLDER ROOTFOLDER = OLIST.ROOTFOLDER;
CLIENTCONTEXT.LOAD(ROOTFOLDER);
CLIENTCONTEXT.EXECUTEQUERY();
VAR ROOTFOLDERURL = ROOTFOLDER.SERVERRELATIVEURL;
STRING[] STRROOTFOLDERS = ((STRING)ROOTFOLDERURL).SPLIT('/');
VAR ROOTFOLDERURL = @"C:\EXPORT\";
FOREACH (STRING FOLDERNAME IN STRROOTFOLDERS)
{
IF (!STRING.ISNULLOREMPTY(FOLDERNAME))
{
ROOTFOLDERURL = PATH.COMBINE(ROOTFOLDERURL, FOLDERNAME);
SYSTEM.IO.DIRECTORY.CREATEDIRECTORY(ROOTFOLDERURL);
}
}
CREATESUBFLODERS(ROOTFOLDER);
CONSOLE.WRITELINE("DONE SUCCESFULLY");
CONSOLE.READKEY();
}
STATIC PRIVATE VOID CREATESUBFLODERS(FOLDER RTFOLDER)
{
FILECOLLECTION FILES = RTFOLDER.FILES;
CLIENTCONTEXT.LOAD(FILES);
CLIENTCONTEXT.EXECUTEQUERY();
FOLDERCOLLECTION FOLDERS = RTFOLDER.FOLDERS;
CLIENTCONTEXT.LOAD(FOLDERS);
CLIENTCONTEXT.EXECUTEQUERY();
FOREACH (MICROSOFT.SHAREPOINT.CLIENT.FILE ITEM IN RTFOLDER.FILES)
{
CLIENTCONTEXT.LOAD(ITEM);
CLIENTCONTEXT.EXECUTEQUERY();
VAR FILEREF = ITEM.SERVERRELATIVEURL;
VAR FILEINFO = MICROSOFT.SHAREPOINT.CLIENT.FILE.OPENBINARYDIRECT(CLIENTCONTEXT, FILEREF);
STRING STRFILEDREF = ((STRING)FILEREF).REPLACE("/", "\\");
VAR FILENAME = "C:\\MIGRATION" + STRFILEDREF;
USING (VAR FILESTREAM = SYSTEM.IO.FILE.CREATE(FILENAME))
{
FILEINFO.STREAM.COPYTO(FILESTREAM);
}
}
FOREACH (FOLDER SUBFOLDER IN RTFOLDER.FOLDERS)
{
STRING STRFILEDREF = ((STRING)SUBFOLDER.SERVERRELATIVEURL).REPLACE("/", "\\");
VAR FILENAME = "C:\\EXPORT" + STRFILEDREF;
SYSTEM.IO.DIRECTORY.CREATEDIRECTORY(@"C:\MIGRATION\"+ SUBFOLDER.SERVERRELATIVEURL);
CREATESUBFLODERS(SUBFOLDER);
}
}
}
}
Issue:
In many cases we need to export files and Folders from Document library. But this is very time consuming activity , because either we need to open that library in Windows explorer and copy and paste all files and folder to drive , this activity will take much time at least 4 hours if documents are more for example 1000 documents or so. Or else we can open Library in Designer and export 1 by 1 files, because through designer we cannot export all files and folder at time.By using Below code you can export it within 5 minutes.
Solution:
For this I have crated CSOM code which will export al files and folder to “C:\Export” folder
You just need to crate this folder and run below code, all files and folder will be exported, and also folder structure will also get maintained.
1) Create folder namely “Export” on C drive
2) Create Console application and give SharePoint Client DLL’s Reference
3) Replace Program.cs code with below program.cs code
4) Change the below 2 lines
static string siteUrl = "https://XXXXXX/sites/teams/SP/"; >>Here give your site URL
public static string listTitle = "Docuemnts"; >>Give Document library display Name
5) Save and run f5, this make take max 5 minutes for 1500 items
6) ) It will start exporting files on Export folder
7) Done
PROGRAM.CS
USING MICROSOFT.SHAREPOINT.CLIENT;
USING SYSTEM;
USING SYSTEM.COLLECTIONS.GENERIC;
USING SYSTEM.IO;
USING SYSTEM.LINQ;
USING SYSTEM.TEXT;
USING SP = MICROSOFT.SHAREPOINT.CLIENT;
NAMESPACE EXPORTLISTITEMS
{
CLASS PROGRAM
{
STATIC STRING SITEURL = "HTTPS://XXXXXXXX/SITES/TEAMS/SP/";
PUBLIC STATIC STRING LISTTITLE = "DOCUMENTS";
PUBLIC STATIC CLIENTCONTEXT CLIENTCONTEXT = NEW CLIENTCONTEXT(SITEURL);
STATIC VOID MAIN(STRING[] ARGS)
{
SP.LIST OLIST = CLIENTCONTEXT.WEB.LISTS.GETBYTITLE(LISTTITLE);
CAMLQUERY CAML = NEW CAMLQUERY();
FOLDER ROOTFOLDER = OLIST.ROOTFOLDER;
CLIENTCONTEXT.LOAD(ROOTFOLDER);
CLIENTCONTEXT.EXECUTEQUERY();
VAR ROOTFOLDERURL = ROOTFOLDER.SERVERRELATIVEURL;
STRING[] STRROOTFOLDERS = ((STRING)ROOTFOLDERURL).SPLIT('/');
VAR ROOTFOLDERURL = @"C:\EXPORT\";
FOREACH (STRING FOLDERNAME IN STRROOTFOLDERS)
{
IF (!STRING.ISNULLOREMPTY(FOLDERNAME))
{
ROOTFOLDERURL = PATH.COMBINE(ROOTFOLDERURL, FOLDERNAME);
SYSTEM.IO.DIRECTORY.CREATEDIRECTORY(ROOTFOLDERURL);
}
}
CREATESUBFLODERS(ROOTFOLDER);
CONSOLE.WRITELINE("DONE SUCCESFULLY");
CONSOLE.READKEY();
}
STATIC PRIVATE VOID CREATESUBFLODERS(FOLDER RTFOLDER)
{
FILECOLLECTION FILES = RTFOLDER.FILES;
CLIENTCONTEXT.LOAD(FILES);
CLIENTCONTEXT.EXECUTEQUERY();
FOLDERCOLLECTION FOLDERS = RTFOLDER.FOLDERS;
CLIENTCONTEXT.LOAD(FOLDERS);
CLIENTCONTEXT.EXECUTEQUERY();
FOREACH (MICROSOFT.SHAREPOINT.CLIENT.FILE ITEM IN RTFOLDER.FILES)
{
CLIENTCONTEXT.LOAD(ITEM);
CLIENTCONTEXT.EXECUTEQUERY();
VAR FILEREF = ITEM.SERVERRELATIVEURL;
VAR FILEINFO = MICROSOFT.SHAREPOINT.CLIENT.FILE.OPENBINARYDIRECT(CLIENTCONTEXT, FILEREF);
STRING STRFILEDREF = ((STRING)FILEREF).REPLACE("/", "\\");
VAR FILENAME = "C:\\MIGRATION" + STRFILEDREF;
USING (VAR FILESTREAM = SYSTEM.IO.FILE.CREATE(FILENAME))
{
FILEINFO.STREAM.COPYTO(FILESTREAM);
}
}
FOREACH (FOLDER SUBFOLDER IN RTFOLDER.FOLDERS)
{
STRING STRFILEDREF = ((STRING)SUBFOLDER.SERVERRELATIVEURL).REPLACE("/", "\\");
VAR FILENAME = "C:\\EXPORT" + STRFILEDREF;
SYSTEM.IO.DIRECTORY.CREATEDIRECTORY(@"C:\MIGRATION\"+ SUBFOLDER.SERVERRELATIVEURL);
CREATESUBFLODERS(SUBFOLDER);
}
}
}
}




