如何使用csom删除sharepoint中的多个文件
How to delete multiple files in sharepoint using 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();
}
}
这是我遇到的错误。
collection 已修改。枚举操作可能无法执行。
P.S。在我添加这行代码之前一切正常。
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();
};
}
}
}
添加最后两行以在下载后从文件夹中删除文件,我已经测试过并且可以在我这边使用。
我正在从列表中的特定文件夹下载文件。一切正常。然后我的老板让我下载后删除文件。
这是我试过的方法。
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();
}
}
这是我遇到的错误。
collection 已修改。枚举操作可能无法执行。
P.S。在我添加这行代码之前一切正常。
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();
};
}
}
}
添加最后两行以在下载后从文件夹中删除文件,我已经测试过并且可以在我这边使用。