我一直在互联网上搜索这个,但没有具体参考托管客户对象模型的答案。
如何迭代存储在文档库下的文档集中的文件?我有一个名为 SAMPLELIST 的列表,所有文档集都存储在其中。每个文档集也可以存放文件。我如何迭代这些文件?
到目前为止我发现的是 LIST.ROOTFOLDER.FILES。但是,这会返回列表中的所有文件(参考 ROOFOLDER)。
谢谢你的帮助。
我一直在互联网上搜索这个,但没有具体参考托管客户对象模型的答案。
如何迭代存储在文档库下的文档集中的文件?我有一个名为 SAMPLELIST 的列表,所有文档集都存储在其中。每个文档集也可以存放文件。我如何迭代这些文件?
到目前为止我发现的是 LIST.ROOTFOLDER.FILES。但是,这会返回列表中的所有文件(参考 ROOFOLDER)。
谢谢你的帮助。
你可以用这个
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);
}
}
假设以下结构:
/ (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);
}
}
关键点: