C# 如何使用csom删除sharepoint中的多个文件

C# 如何使用csom删除sharepoint中的多个文件,c#,sharepoint,csom,C#,Sharepoint,Csom,我正在从列表中的特定文件夹下载文件。一切正常。然后我的老板让我下载后删除文件 这是我试过的 SecureString str = new SecureString(); string cnf = Util.Cipher(ConfigurationManager.AppSettings["cnf"].ToString()); foreach (char ch in cnf.ToCharArray())

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

这是我试过的

            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();
                }

            }
这就是我得到的错误

该集合已被修改。枚举操作不能执行

另外,在我添加这行代码之前,一切都正常

file.DeleteObject();
你应该使用

 File.Delete(dir + "\\" + file.Name);

只需修改代码段,如下所示:

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();
            };

        }


    }
}

添加最后两行以从文件夹中删除文件下载后,我已测试并在我身边运行。

如果我不使用deleteobject,如何删除它?我将在sharepoint中删除该文件。这段代码有效吗?ToList方法不包含关于filecollection的定义。@ErrolPalacio,ToList需要引用using System.Linq,我将更新上面的代码以添加using供您参考。