I need the following format when recursively retrieving folders, subfolders and files. Basically reproduce a "Windows Explorer" type of view with the data for the Website UI via C# and CSOM.
Any thoughts?
- Folder 1
- -> Subfolder 1
- ->-> File 3
- ->-> File 4
- -> Subfolder 2
- -> Subfolder 3
- ->-> File 5
- ->-> File 6
- -> File 1
- -> File 2
This is what I'm currently getting:
Code:
public string GetAllFiles()
{
var returnResult = "<ul>";
var items = new List<ListItem>();
try
{
using (var ctx = Auth())
{
var documentLibrary = "TestDocuments";
var list = ctx.Web.Lists.GetByTitle(documentLibrary);
var folders = GetAllFolders(list);
var recordsList = new List<FileModel>();
foreach (var item in folders)
{
var rec = new FileModel();
rec.fileName = item["FileLeafRef"].ToString();
rec.filePath = item["FileDirRef"].ToString();
recordsList.Add(rec);
foreach (var item in recordsList.OrderBy(x => x.filePath))
{
returnResult += string.Format("<li>FileDirRef: {0}, FileLeafRef: {1}</li>", item.filePath, item.fileName);
}
}
returnResult += "</ul>";
return returnResult;
}
}
public class FileModel {
public string fileName { get; set; }
public string filePath { get; set; }
}
public static List<ListItem> GetAllFolders(List list)
{
var ctx = list.Context;
var qry = new CamlQuery();
qry.ViewXml = "<View Scope='RecursiveAll'><Query><OrderBy><FieldRef Name=\"FileLeafRef\" Ascending=\"TRUE\"/></OrderBy></Query></View>";
var folderItems = list.GetItems(qry);
ctx.Load(folderItems);
ctx.ExecuteQuery();
var allFolders = folderItems.ToList();
return allFolders;
}