如何使用 csom 删除共享点中的多个文件

我正在从列表中的特定文件夹下载文件。一切正常。然后我老板让我下载后删除文件。


这是我尝试过的。


            SecureString str = new SecureString();

            string cnf = Util.Cipher(ConfigurationManager.AppSettings["cnf"].ToString());

            foreach (char ch in cnf.ToCharArray())

            {

                str.AppendChar(ch);

            }


            string user = ConfigurationManager.AppSettings["user"].ToString();

            SharePointOnlineCredentials credentials = new SharePointOnlineCredentials(user, str);

            string siteUrl = ConfigurationManager.AppSettings["site_url"].ToString();

            using (ClientContext ctx = new ClientContext(siteUrl))

            {

                ctx.Credentials = credentials;

                string library = ConfigurationManager.AppSettings["sharepoint_library"].ToString();


                List mylibrary = ctx.Web.Lists.GetByTitle(library);

                FileCollection files = mylibrary.RootFolder.Folders.GetByUrl(sharepointFolder).Files;


                ctx.Load(files);

                ctx.ExecuteQuery();


                foreach (Microsoft.SharePoint.Client.File file in files)

                {

                    FileInformation fileinfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(ctx, file.ServerRelativeUrl);


                    ctx.ExecuteQuery();


                    using (FileStream filestream = new FileStream(dir + "\\" + file.Name, FileMode.Create))

                    {

                        fileinfo.Stream.CopyTo(filestream);

                    }

                    file.DeleteObject();

                    ctx.ExecuteQuery();

                }


            }

这是我收到的错误。


该集合已被修改。枚举操作可能无法执行。


PS 一切正常,直到我添加这行代码。


file.DeleteObject();


梦里花落0921
浏览 127回答 2
2回答

湖上湖

只需修改代码片段如下:using Microsoft.SharePoint.Client;using System.IO;using System.Linq;using System.Security;namespace CSOM{    class Program    {        static void Main(string[] args)        {            using (ClientContext ctx = new ClientContext("https://tenant.sharepoint.com/sites/dev"))            {                string password = "*****";                string account = "user@tenant.onmicrosoft.com";                var secret = new SecureString();                foreach (char c in password)                {                    secret.AppendChar(c);                }                ctx.Credentials = new SharePointOnlineCredentials(account, secret);                List mylibrary = ctx.Web.Lists.GetByTitle("Documents");                FileCollection files = mylibrary.RootFolder.Folders.GetByUrl("/sites/dev/shared documents/folder1").Files;                ctx.Load(files);                ctx.ExecuteQuery();                foreach (Microsoft.SharePoint.Client.File file in files)                {                    FileInformation fileinfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(ctx, file.ServerRelativeUrl);                    ctx.ExecuteQuery();                    using (FileStream filestream = new FileStream("D:" + "\\" + file.Name, FileMode.Create))                    {                        fileinfo.Stream.CopyTo(filestream);                    }                }                files.ToList().ForEach(file => file.DeleteObject());                ctx.ExecuteQuery();            };        }    }}添加最后两行以在下载后从文件夹中删除文件,我已经测试过并且它在我这边工作。

心有法竹

你应该使用 File.Delete(dir + "\\" + file.Name);
打开App,查看更多内容
随时随地看视频慕课网APP