SharePoint--简单的文件复制
思路
通过用户名密码登录SharePoint后,获取Title为Documents的列表项下的根文件夹。在根文件夹下查找是否存在文件要复制到的地址,不存在的话就创建一个对应的文件夹。创建好之后,将要复制文件的地址中文件逐个的进行复制。思路比较简单,但是API比较难找,找了一点时间才找到对应的API。
代码
/// /// 简单的文件复制/// /// SharePoint网址/// 用户名/// 密码/// 复制前的文件名/// 复制到的文件名private static void copy(string SPOUrl, string userName, SecureString password, String copyFromFolderName, String copyToFolderName){Folder folderFrom;List files = new List();try{using (var context = new ClientContext(SPOUrl)){context.Credentials = new SharePointOnlineCredentials(userName, password);Web oWeb = context.Web;ListCollection lc = oWeb.Lists;List itemsCollection = oWeb.Lists.GetByTitle("Documents");Folder root = itemsCollection.RootFolder;FolderCollection fdc = root.Folders;context.Load(fdc);context.ExecuteQuery();foreach (Folder fd in fdc){context.Load(fd);context.ExecuteQuery();}var b = fdc.Where(fd => fd.Name == copyToFolderName);var a = fdc.Where(fd => fd.Name == copyFromFolderName);folderFrom = a.First();var x = b.ToArray();if (x.Length == 0){ResourcePath rp = ResourcePath.FromDecodedUrl(copyToFolderName);root.AddSubFolderUsingPath(rp);context.ExecuteQuery();}FileCollection fc = folderFrom.Files;context.Load(fc);context.ExecuteQuery();foreach (Microsoft.SharePoint.Client.File f in fc){context.Load(f);context.ExecuteQuery();f.CopyTo($"{SPOUrl}Shared Documents/{copyToFolderName}/{f.Name}", true);context.ExecuteQuery();}}}catch (Exception e){Console.WriteLine(e.Message);}}
在每次需要使用上一级对象的属性对象时,都需要对下一级对象进行context.Load()操作,要不然会出现报错现象,在每次读取或者更新时,需要执行ExecuteQuery()方法。
参考
https://docs.microsoft.com/zh-cn/sharepoint/dev/sp-add-ins/complete-basic-operations-using-sharepoint-client-library-code#sharepoint-list-item-tasks
https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.sharepoint.client?view=sharepoint-pnpcoreol-3.2.1810
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
