如何在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?
      }
   }
}

如何在c#中获取SharePoint库中每个文件夹的每个项目

您可以创建一个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)
    {
    }

不确定您是否正在寻找客户端代码。