Создание папок программными средствами в SharePoint 2013
в настоящее время у меня есть код, который создает папку в при запуске:
using (var context = new Microsoft.SharePoint.Client.ClientContext(sharePointSite))
{
    context.Credentials = new Microsoft.SharePoint.Client.SharePointOnlineCredentials(user, password);
    Web web = context.Web;
    Microsoft.SharePoint.Client.List docs = web.Lists.GetByTitle(<upper level folder>);
    docs.EnableFolderCreation = true;
    docs.RootFolder.Folders.Add(folderName);
    context.ExecuteQuery();
    return true;
}
у меня возникли проблемы с созданием вложенных папок в папках, которые я создал с помощью этого кода уже. Так, как если бы я хотел создать папку под названием Feb под Documents это сделать. Но если бы я хотел создать папку под названием Week 2 в новую папку Feb. Так не пойдет. Я получаю эту ошибку:
{"List 'Feb' does not exist at site with URL 'https://my.sharepoint.com/sites/labels'."}
Я понимаю, что проблема, вероятно,docs.RootFolder.Folders.Add(folderName);, потому что Feb не будет корневой папкой, и когда она ищет ее, будет создано исключение. 
поэтому я надеялся, что кто-то может помочь мне с некоторым кодом для добавления вложенных папок в уже созданные папки. Я использую Visual Stuidos 2010 и не могу обновить до 2012, иначе я бы. У меня есть dll, на которые можно ссылаться в VS 2010.
2 ответов
как создать папку (включая вложенную) через CSOM в SharePoint 2010/2013
/// <summary>
/// Create Folder client object
/// </summary>
/// <param name="web"></param>
/// <param name="listTitle"></param>
/// <param name="fullFolderUrl"></param>
/// <returns></returns>
public static Folder CreateFolder(Web web, string listTitle, string fullFolderUrl)
{
    if (string.IsNullOrEmpty(fullFolderUrl))
        throw new ArgumentNullException("fullFolderUrl");
    var list = web.Lists.GetByTitle(listTitle);
    return CreateFolderInternal(web, list.RootFolder, fullFolderUrl);
}
private static Folder CreateFolderInternal(Web web, Folder parentFolder, string fullFolderUrl)
{
    var folderUrls = fullFolderUrl.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
    string folderUrl = folderUrls[0];
    var curFolder = parentFolder.Folders.Add(folderUrl);
    web.Context.Load(curFolder);
    web.Context.ExecuteQuery();
    if (folderUrls.Length > 1)
    {
        var subFolderUrl = string.Join("/", folderUrls, 1, folderUrls.Length - 1);
        return CreateFolderInternal(web, curFolder, subFolderUrl);
    }
    return curFolder;
}
использование
 using (var ctx = new ClientContext("https://contoso.onmicrosoft.com/"))
 {
       ctx.Credentials = new Microsoft.SharePoint.Client.SharePointOnlineCredentials("username", "password");
       var folder = CreateFolder(ctx.Web, "Shared Documents", "FolderA/SubFolderA/SubSubFolderA");
 }
как получить объект клиента папки
public static Folder GetFolder(Web web, string fullFolderUrl)
{
    if (string.IsNullOrEmpty(fullFolderUrl))
        throw new ArgumentNullException("fullFolderUrl");
    if (!web.IsPropertyAvailable("ServerRelativeUrl"))
    {
        web.Context.Load(web,w => w.ServerRelativeUrl);
        web.Context.ExecuteQuery();
    }
    var folder = web.GetFolderByServerRelativeUrl(web.ServerRelativeUrl + fullFolderUrl);
    web.Context.Load(folder);
    web.Context.ExecuteQuery();
    return folder;
}
использование
var existingFolder = GetFolder(ctx.Web, "Shared Documents/FolderA/SubFolderA/SubSubFolderA");
вы можете создавать папки такой:
Microsoft.SharePoint.Client.List docs = web.Lists.TryGetList("upper level folder");
FolderCollection folderColl = docs.RootFolder.SubFolders;
Folder newFolder = folderColl.Add("upper level folder/Feb/Week 2");
