简体   繁体   English

使用caml查询动态下载文件,而不是通过get folder方法

[英]Downloading file dynamically using caml query only not by get folder method

I want to download multiple files say by using regex where user provides the file name through a variable and that gets passed in caml query and it can iterate through a list url. 我想通过使用正则表达式来下载多个文件,其中用户通过变量提供文件名并且在caml查询中传递它并且它可以遍历列表URL。 A bit new on this caml query zone. 这个caml查询区有点新。 Any advice how to achieve it? 有什么建议如何实现呢?

    camlQuery.ViewXml = @"<View> 

           <Query>

              <Where><Eq><FieldRef Name='FileLeafRef' /><Value Type='File'>" + fileToDownload + @"</Value></Eq></Where>

           </Query>

            <ViewFields><FieldRef Name='FileRef' /><FieldRef Name='FileLeafRef' /></ViewFields>

     </View>"; 
                        Web web = clientContext.Web;
                         clientContext.Load(web);
                         clientContext.Load(web.Lists);
                         List list = clientContext.Web.GetList(listUrl);
                         //clientContext.Load(list);
                         //clientContext.ExecuteQuery();
                          ListItemCollection listItems = list.GetItems(camlQuery);
                         clientContext.Load(listItems);
                         clientContext.ExecuteQuery();

                         foreach (var item in listItems)
                         {
                             if (item.FileSystemObjectType == FileSystemObjectType.File)
                             {
                                 Console.WriteLine("This is file");
                             }
                             else if (item.FileSystemObjectType == FileSystemObjectType.Folder)
                             {
                                 Console.WriteLine("This is folder");
                             }

    camlQuery.ViewXml = @"<View> 

           <Query>

              <Where><Eq><FieldRef Name='FileLeafRef' /><Value Type='File'>" + fileToDownload + @"</Value></Eq></Where>

           </Query>

            <ViewFields><FieldRef Name='FileRef' /><FieldRef Name='FileLeafRef' /></ViewFields>

     </View>"; 
                        Web web = clientContext.Web;
                         clientContext.Load(web);
                         clientContext.Load(web.Lists);
                         List list = clientContext.Web.GetList(listUrl);
                         //clientContext.Load(list);
                         //clientContext.ExecuteQuery();
                          ListItemCollection listItems = list.GetItems(camlQuery);
                         clientContext.Load(listItems);
                         clientContext.ExecuteQuery();

                         foreach (var item in listItems)
                         {
                             if (item.FileSystemObjectType == FileSystemObjectType.File)
                             {
                                 Console.WriteLine("This is file");
                             }
                             else if (item.FileSystemObjectType == FileSystemObjectType.Folder)
                             {
                                 Console.WriteLine("This is folder");
                             }

I need to download the file from matching pattern on FiletoDownload variable like if its . 我需要从FiletoDownload变量上的匹配模式下载文件,如果它 it should download all files. 它应该下载所有文件。

Here is the code snippet for your reference: 以下是供您参考的代码段:

        ListItemCollection listItems = list.GetItems(camlQuery);
        clientContext.Load(listItems);
        clientContext.ExecuteQuery();
        foreach (var item in listItems)
        {
            if (item.FileSystemObjectType == FileSystemObjectType.File)
            {
                Console.WriteLine("This is file");
                clientContext.Load(item.File);
                clientContext.ExecuteQuery();

                var fileRef = item.File.ServerRelativeUrl;
                var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, fileRef);
                var fileName = Path.Combine(@"D:\", (string)item.File.Name);
                using (var fileStream = System.IO.File.Create(fileName))
                {
                    fileInfo.Stream.CopyTo(fileStream);
                }
            }
            else if (item.FileSystemObjectType == FileSystemObjectType.Folder)
            {
                Console.WriteLine("This is folder");
            }
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM