You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中使用PnP Core、PnP Framework访问SharePoint文件夹和文件

C# 直接访问指定路径SharePoint文件夹的实现方案

不需要逐层遍历文件夹,可通过以下两种高性能方法直接定位目标文件夹:

方法1:使用原生CSOM API(Microsoft.SharePoint.Client)

先将目标文件夹的完整URL转换为服务器相对路径,示例中https://teamsite.msc.com/sites/mysite/Shared%20Documents/General/TestFolder/对应的服务器相对路径为/sites/mysite/Shared Documents/General/TestFolder/(将URL编码的%20替换为空格,删除域名前缀即可)。

// 填入目标文件夹的服务器相对路径
string targetFolderPath = "/sites/mysite/Shared Documents/General/TestFolder/";
// 直接定位文件夹
Folder targetFolder = clientContext.Web.GetFolderByServerRelativeUrl(targetFolderPath);
// 按需加载文件夹属性、下属文件/子文件夹,仅需1次服务端请求
clientContext.Load(targetFolder,
    f => f.Exists, // 可先加载Exists属性判断文件夹是否存在
    f => f.Name,
    f => f.Files, // 加载文件夹下所有文件
    f => f.Folders); // 加载文件夹下所有子文件夹
clientContext.ExecuteQuery();

// 先判断文件夹是否存在再操作
if (targetFolder.Exists)
{
    // 遍历文件示例
    foreach (var file in targetFolder.Files)
    {
        Console.WriteLine($"文件名:{file.Name},文件路径:{file.ServerRelativeUrl}");
    }
}

方法2:使用PnP Core扩展方法(更简洁)

你已引入PnP.Core类库,可直接调用封装好的扩展方法,无需手动处理路径适配:

// 传入相对于站点根目录的文件夹路径即可,格式为「文档库名/子文件夹层级」
var targetFolder = clientContext.Web.GetFolderAsync("Shared Documents/General/TestFolder").GetAwaiter().GetResult();
// 直接获取文件夹下所有文件
var folderFiles = targetFolder.GetFilesAsync().GetAwaiter().GetResult();

foreach (var file in folderFiles)
{
    Console.WriteLine(file.Name);
}

性能对比说明

你当前使用的逐层遍历+循环调用ExecuteQuery()的方式,每进一级文件夹都会发起1次服务端请求,文件夹层级越深性能损耗越大。上述两种方法仅需要1-2次服务端请求即可拿到所有需要的数据,性能提升非常显著。

内容的提问来源于stack exchange,提问作者TemoZat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:45:08