使用SharePoint CSOM获取文件夹/文件列表为空,但UI可见,如何排查?
核心原因:权限限制
你猜测的权限问题确实是关键原因之一:如果你的账号仅拥有目标文件夹的独立权限,而没有文档库根文件夹的读取权限,那么通过list.RootFolder.Folders遍历根文件夹子集合时,会因权限不足无法看到目标文件夹,导致返回的集合为空。
解决方案
方案1:直接定位目标文件夹(推荐)
无需遍历根文件夹的子集合,直接通过文件夹的服务器相对路径定位,只要你拥有该文件夹的权限即可访问,不受根文件夹权限限制。
优化后的代码:
static void Main(string[] args) { using (ClientContext ctx = new ClientContext("https://xxxxxxxx.sharepoint.com/sites/Industrial-IndustrialChannel/")) { ctx.AuthenticationMode = ClientAuthenticationMode.Default; SecureString securePassword = new SecureString(); foreach (char c in "password") securePassword.AppendChar(c); ctx.Credentials = new SharePointOnlineCredentials("username", securePassword); // 替换<Folder-Name>为实际文件夹名称,路径格式为站点相对路径+文档库名+文件夹名 Folder targetFolder = ctx.Web.GetFolderByServerRelativeUrl("/sites/Industrial-IndustrialChannel/Documents/<Folder-Name>"); ctx.Load(targetFolder, f => f.Files); // 仅加载需要的属性,提升性能 ctx.ExecuteQuery(); foreach (File file in targetFolder.Files) { Debug.WriteLine(file.Name); } Console.WriteLine("操作完成"); Console.Read(); } }
方案2:调整权限
如果必须通过遍历根文件夹的方式获取子文件夹,需要联系管理员给你的账号添加文档库根文件夹的读取权限,或者授予文档库的"浏览"级权限,确保你能看到根文件夹下的所有子对象。
额外注意点
原代码中ClientContext的URL包含双斜杠//,建议改为单斜杠/,避免潜在的路径解析问题。
内容的提问来源于stack exchange,提问作者Matt Holmen
相关产品推荐
相关产品推荐

