【问题标题】:How to create a subfolder in a subsubfolder SharePoint Online C#如何在子子文件夹 SharePoint Online C# 中创建子文件夹
【发布时间】:2018-06-04 10:50:36
【问题描述】:

我想在 C# 的文档库中创建一些文件夹。

文档库中的文件夹结构应该如下:

"98_Projekte" --> "Muster Mandant" --> "01 测试子文件夹"

在我的 C# 代码中,我只在“98_Projekte”中创建子文件夹“Muster Mandant”。这是正确的,但我想之后在“Muster Mandant”中创建新的子文件夹(参见第二个 foreach)。

        public static void AddFolder(ClientContext context, string[] folders)
    {
        Web web = context.Web;
        var docLibrary = web.DefaultDocumentLibrary().RootFolder;
        context.Load(docLibrary);
        context.ExecuteQuery();

        foreach (Microsoft.SharePoint.Client.Folder subFolder in docLibrary.Folders)
        {
            if (subFolder.Name == "98_Projekte")
            {
                subFolder.Folders.Add("Muster Mandant");
                context.ExecuteQuery();
                docLibrary = subFolder;
                docLibrary.Update();
            }
        }
        foreach (Microsoft.SharePoint.Client.Folder subSubFolder in docLibrary.Folders)
        {
            if (subSubFolder.Name == "Muster Mandant")
            {
                foreach (string folder in folders)
                {
                    subSubFolder.Folders.Add(folder);
                }
            }
        }
        context.ExecuteQuery();
    }
}

你有什么解决办法吗?

【问题讨论】:

    标签: c# sharepoint sharepoint-online


    【解决方案1】:

    您可以查看以下代码。

     public static Folder AddSubFolder(ClientContext context, Folder ParentFolder, string folderName)
            {
                Folder resultFolder=ParentFolder.Folders.Add(folderName);
                context.ExecuteQuery();
                return resultFolder;   
            }
    
            static void Main(string[] args)
            {
                using (var context = new ClientContext("https://domain.sharepoint.com/sites/TST/"))
                {
                    string password = "pw";
                    SecureString sec_pass = new SecureString();
                    Array.ForEach(password.ToArray(), sec_pass.AppendChar);
                    sec_pass.MakeReadOnly();
                    context.Credentials = new SharePointOnlineCredentials("lee@domain.onmicrosoft.com", sec_pass);               
    
                    Web web = context.Web;
                    var folders = web.DefaultDocumentLibrary().RootFolder.Folders;
                    context.Load(folders);
                    context.ExecuteQuery();
    
                    foreach (Folder subFolder in folders)
                    {
                        if (subFolder.Name == "98_Projekte")
                        {
                           Folder parent1= AddSubFolder(context,subFolder,"Muster Mandant");
                           AddSubFolder(context, parent1, "01 Test Subfolder");   
                        }
                    }
    
                    Console.WriteLine("Done");
                    Console.ReadKey();
                }
    
            }
    

    【讨论】:

    • 好的,我明白了。我必须使用两个函数来获得正确的顺序,而不是使用两个单独的 foreach 循环。您的代码有效,谢谢!
    【解决方案2】:

    我认为问题在于您的代码期望 .Folders 属性包含所有文件夹(递归),而您只是获取根文件夹的直接子级。在您的第二个循环中检查 docLibrary.Folders 属性/集合的上下文并查看返回的内容。

    【讨论】:

      猜你喜欢
      • 2018-12-02
      • 2017-11-04
      • 1970-01-01
      • 2013-03-12
      • 2014-01-17
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多