C# SharePoint-将文件夹下载为zip文件

C# SharePoint-将文件夹下载为zip文件,c#,sharepoint,C#,Sharepoint,我需要一个API(C#)在SharePoint中将文件夹作为一个zip文件下载。在选择一个或几个文件夹后,SharePoint网站中启用了此功能,但我找不到如何以编程方式执行此操作。 我在类Microsoft.SharePoint.Client.Folder中未看到任何内容。也许要以某种方式使用Microsoft.SharePoint.Client.DocumentSet。找不到答案。我可以使用file.OpenBinaryDirect逐个文件地执行此操作,但可能已经存在就绪函数。谢谢。示例代码

我需要一个API(C#)在SharePoint中将文件夹作为一个zip文件下载。在选择一个或几个文件夹后,SharePoint网站中启用了此功能,但我找不到如何以编程方式执行此操作。
我在类
Microsoft.SharePoint.Client.Folder
中未看到任何内容。也许要以某种方式使用Microsoft.SharePoint.Client.DocumentSet。找不到答案。我可以使用file.OpenBinaryDirect逐个文件地执行此操作,但可能已经存在就绪函数。谢谢。

示例代码供您参考

static void Main(string[] args)
        {
            string _SiteUrl = "https://domain.sharepoint.com/sites/tst";
            using (var clientContext = new ClientContext(_SiteUrl))
            {
                Console.ForegroundColor = ConsoleColor.Green;
                string password = "pw";
                SecureString sec_pass = new SecureString();
                Array.ForEach(password.ToArray(), sec_pass.AppendChar);
                sec_pass.MakeReadOnly();
                clientContext.Credentials = new SharePointOnlineCredentials("lee@domain.onmicrosoft.com", sec_pass);

                Web web = clientContext.Web;
                Folder folder = web.GetFolderByServerRelativeUrl("/sites/TST/MyDoc4/Folder");
                var files = folder.Files;
                clientContext.Load(files);
                clientContext.ExecuteQuery();
                Console.WriteLine();
                //Regex regex = new Regex(_SiteUrl, RegexOptions.IgnoreCase);

                var list = web.Lists.GetByTitle("MyDoc4");
                var libRootFolder = list.RootFolder;
                var subFolder = libRootFolder.Folders.GetByUrl("Folder");
                clientContext.Load(libRootFolder);
                clientContext.Load(subFolder);
                clientContext.ExecuteQuery();
                Console.WriteLine(libRootFolder.ItemCount);
                Console.WriteLine(subFolder.ItemCount);


                using (System.IO.MemoryStream mStream = new System.IO.MemoryStream())
                {
                    using (var archive = new ZipArchive(mStream, ZipArchiveMode.Create, true))
                    {
                        foreach (var file in files)
                        {
                            clientContext.Load(file);
                            Console.WriteLine(file.Name);
                            ClientResult<Stream> stream = file.OpenBinaryStream();
                            clientContext.ExecuteQuery();

                            var zipArchiveEntry = archive.CreateEntry(file.Name);
                            using (Stream zipEntryStream = zipArchiveEntry.Open())
                            {

                                    if (stream != null)
                                    {
                                        stream.Value.CopyTo(zipEntryStream);
                                    }

                            }
                        }
                    }
                    using (var fileStream = new FileStream(@"C:\Lee\FileDownload\test.zip", FileMode.Create))
                    {
                        mStream.Seek(0, SeekOrigin.Begin);
                        mStream.CopyTo(fileStream);
                    }
                }


                Console.WriteLine("done");
                Console.ReadKey();
            }

        }
static void Main(字符串[]args)
{
字符串_SiteUrl=”https://domain.sharepoint.com/sites/tst";
使用(var clientContext=newclientcontext(_SiteUrl))
{
Console.ForegroundColor=ConsoleColor.Green;
字符串密码=“pw”;
SecureString sec_pass=新SecureString();
ForEach(password.ToArray(),sec_pass.AppendChar);
sec_pass.MakeReadOnly();
clientContext.Credentials=新的SharePointOnlineCredentials(“lee@domain.onmicrosoft.com",sec_pass),;
Web=clientContext.Web;
Folder Folder=web.GetFolderByServerRelativeUrl(“/sites/TST/MyDoc4/Folder”);
var files=folder.files;
加载(文件);
clientContext.ExecuteQuery();
Console.WriteLine();
//Regex Regex=new Regex(_SiteUrl,RegexOptions.IgnoreCase);
var list=web.Lists.GetByTitle(“MyDoc4”);
var libRootFolder=list.RootFolder;
var subFolder=libRootFolder.Folders.GetByUrl(“文件夹”);
加载(libRootFolder);
加载(子文件夹);
clientContext.ExecuteQuery();
Console.WriteLine(libRootFolder.ItemCount);
Console.WriteLine(子文件夹.ItemCount);
使用(System.IO.MemoryStream mStream=new System.IO.MemoryStream())
{
使用(var archive=new ZipArchive(mStream,ZipArchiveMode.Create,true))
{
foreach(文件中的var文件)
{
加载(文件);
Console.WriteLine(file.Name);
ClientResult stream=file.OpenBinaryStream();
clientContext.ExecuteQuery();
var zipArchiveEntry=archive.CreateEntry(file.Name);
使用(Stream zipEntryStream=zipArchiveEntry.Open())
{
if(流!=null)
{
stream.Value.CopyTo(zipEntryStream);
}
}
}
}
使用(var fileStream=newfilestream(@“C:\Lee\FileDownload\test.zip”,FileMode.Create))
{
mStream.Seek(0,SeekOrigin.Begin);
CopyTo(fileStream);
}
}
控制台。写入线(“完成”);
Console.ReadKey();
}
}