1

我一直在互联网上搜索这个,但没有具体参考托管客户对象模型的答案。

如何迭代存储在文档库下的文档集中的文件?我有一个名为 SAMPLELIST 的列表,所有文档集都存储在其中。每个文档集也可以存放文件。我如何迭代这些文件?

到目前为止我发现的是 LIST.ROOTFOLDER.FILES。但是,这会返回列表中的所有文件(参考 ROOFOLDER)。

谢谢你的帮助。

4

2 回答 2

4

你可以用这个

        ClientContext clientContext = new ClientContext("http://sharepoint");
        List sharedDocumentsList = clientContext.Web.Lists.GetByTitle("SAMPLELIST");
        CamlQuery camlQuery = new CamlQuery();
        string documentSetName = "DS1";
        camlQuery.ViewXml =
            @"<View>
            <Query>
              <Where>
                    <And>
                        <BeginsWith>
                            <FieldRef Name='ContentTypeId'/>
                            <Value Type='Text'>0x0120D5</Value>                                   
                        </BeginsWith>
                        <Eq>
                            <FieldRef Name='FileLeafRef'/>
                            <Value Type='Text'>" + documentSetName + @"</Value>
                        </Eq>
                    </And>
              </Where>
            </Query>
          </View>";
        ListItemCollection listItems = sharedDocumentsList.GetItems(camlQuery);
        clientContext.Load(sharedDocumentsList);
        clientContext.Load(listItems);
        clientContext.ExecuteQuery();
        foreach (ListItem item in listItems)
        {
                clientContext.Load(item);
                clientContext.ExecuteQuery();

                Folder folder = clientContext.Web.GetFolderByServerRelativeUrl(item.FieldValues["FileRef"].ToString());
                FileCollection files = folder.Files;

                clientContext.Load(folder);
                clientContext.Load(files);
                clientContext.ExecuteQuery();

                foreach (File file in files)
                {
                    Console.WriteLine("{0}", file.Name);
                }
        }
于 2013-04-02T13:51:54.960 回答
0

如何通过 SharePoint CSOM 获取文档集的文件

假设以下结构:

/ (Root Site)
   |
   DocCenter (Site)
       |
     Documents (Library)
         |
       2013 (Document Set)

使用 Web.GetFolderByServerRelativeUrl 方法

使用Web.GetFolderByServerRelativeUrl 方法获取位于指定服务器相对 URL 的 Document Set 对象,然后使用 Folder.Files 属性获取 Document Set 中包含的所有文件的集合

var folderUrl = "/doccenter/Documents/2013";
using (var ctx = new ClientContext(webUri))
{
    var files = ctx.Web.GetFolderByServerRelativeUrl(folderUrl).Files;
    ctx.Load(files);
    ctx.ExecuteQuery();
}

基于查询的方法

以下示例演示如何使用CAML 查询返回位于文档集中的文件:

var folderUrl = "/doccenter/Documents/2013";
var listTitle = "Documents";
using (var ctx = new ClientContext(webUri))
{
   var list = ctx.Web.Lists.GetByTitle(listTitle);
   var qry = CamlQuery.CreateAllItemsQuery();
   qry.FolderServerRelativeUrl = folderUrl;
   var items = list.GetItems(qry);
   ctx.Load(items, icol=> icol.Include(i => i.File));
   ctx.ExecuteQuery();

   //print file names            
   foreach (var item in items)
   {
       Console.WriteLine(item.File.Name);
   }
}

关键点:

于 2015-04-07T09:19:48.887 回答