如何在c#中获取SharePoint库中每个文件夹的每个项目
本文关键字:文件夹 项目 SharePoint 获取 | 更新日期: 2023-09-27 18:03:50
在我的项目中,我必须显示用户给我的库路径的所有项目名称。如果没有文件夹库包含=>没有问题。
然而,有许多文件夹,子文件夹,子文件夹,子文件夹,子^n个文件夹。我不能循环所有的文件夹,这是一个无限循环。我不需要代码,我只需要如何循环所有文件夹的概念。
因此,我需要你们所有有经验的程序员的帮助。
结果应该是:
item name folder name
---------------------------------------------
item1
item2
item1 subF1
item1 subF2
item1 subF2sub1
.
.
我的想法:
// path of library and folder is URL. For example, http://example.com/libraryName/subF2/subF2sub1/item1
//if i get all folders'path, i can then get the file name by those paths.
// i won't paste my code here because there are >100 lines.
void checkFolderExist(libraryPathByUser)
{
if("folderInLibrary" != nil)
{
foreach (var folder in library)
{
string folderPath = getFolderPath(folder);
strList.Add(folderPath);
// so, how about sub-folder in the folder?
}
}
}
您可以创建一个SPQuery
对象,并将其Scope
属性设置为RecursiveAll
,例如:
SPQuery query = new SPQuery();
SPFolder folder = get the folder object by folder path
query.Folder = folder;
query.ViewXml = "<View Scope='"RecursiveAll'"><Query>your query goes here</Query></View>";
SPListItemCollection items = yourLibrary.GetItems(query);
Dictionary<string, List<SPListItem>> folderItems = new Dictionary<string, SPListItem[]>();
foreach (SPListItem item in items)
{
// If items are files
SPFile file = item.Web.GetFile(item.Url);
string folderName = file.ParentFolder.Name;
if (!folderItems.ContainsKey(folderName))
{
folderItems[folderName] = new List<SPListItem>();
}
folderItems[folderName].Add(item);
}
下面的代码将递归地搜索所有工件并存储在listtitem对象中。它正在使用csom。
ClientContext clientContext = new ClientContext("http://Servername/");
List sharedDocumentsList = clientContext.Web.Lists.GetByTitle("Shared Documents");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml =
@"<View Scope='Recursive' />";
ClientOM.ListItemCollection listItems =
sharedDocumentsList.GetItems(camlQuery);
clientContext.Load(listItems);
clientContext.ExecuteQuery();
foreach (var item in listItems)
{
}
不确定您是否正在寻找客户端代码。