在SharePoint Online (CSOM)的文档库中检查和创建文件夹的最常用方法



我有一个 SharePoint Online,我可以在其中通过控制台应用程序成功连接:

private static ClientContext GetUserContext()
{
   var o365SecurePassword = new SecureString();
   foreach (char c in o365Password)
   {
       o365SecurePassword.AppendChar(c);
   }
   var o365Credentials = new SharePointOnlineCredentials(o365Username, o365SecurePassword);
   var o365Context = new ClientContext(o365SiteUrl);
   o365Context.Credentials = o365Credentials;
   return o365Context;
}

但是我现在需要做的是进入名为"doc_archive"的 SharePoint 文档库,并检查是否存在名为"K20170409-01"的文件夹。如果没有创建一个新的。

失败的尝试

ClientContext context = GetUserContext();
Web web = context.Web;
Web webroot = context.Site.RootWeb;
context.Load(web);
context.Load(webroot);
List list = webroot.GetList("doc_archive");
context.Load(list);
FolderCollection folders = list.RootFolder.Folders;
context.Load(folders);
IEnumerable<Folder> existingFolders = context.LoadQuery(
    folders.Include(
    folder => folder.Name)
);
context.ExecuteQuery();

通过 CSOM(命令行应用程序(在 SharePoint Online 中的文档库中检查和创建文件夹的最快方法是什么?

如果您对使用外部库感到满意,那么OfficeDevPnP.Core有一些很棒的CSOM扩展,用于SharePoint和SharePoint Online。它随时可作为 NuGet 包添加到项目中。

对于您的要求,有EnsureFolderPath扩展名。此函数将检查文件夹是否存在,根据需要创建它并返回Microsoft.SharePoint.Client.Folder对象。

非常易于使用:

var webRelativeUrlToFolder = "/doc_archive/K20170409-01"
var folder = cc.Web.EnsureFolderPath(webRelativeUrlToFolder);
cc.Load(folder);
cc.ExecuteQuery();

我不能保证这会有多,但它最终在 0365 上有效。请注意,如果目标已存在,则会引发ServerException

using (var ctx = new ClientContext(siteUrl))
{
     ctx.Credentials = new SharePointOnlineCredentials(username, securePwd);
     var list = new ListCreationInformation()
     {
         Title = title
         Description = "User Created Document Library",
         TemplateType = asDocumentLibrary ? 101 : 100 // 100 is a custom list.
     };
    ctx.Web.Lists.Add(list);
    ctx.ExecuteQuery();
    success = true;
}

大多数CSOM示例都可以在Powershell中找到。C# CSOM 中的过程实际上是相同的,因此下次当 C# 示例不可用时,请查找 Powershell 示例。

最新更新