使用 pnp.core 和 pnp.framework 在 C# 中访问共享点文件夹和文件的正确方法是啥?

Posted

技术标签:

【中文标题】使用 pnp.core 和 pnp.framework 在 C# 中访问共享点文件夹和文件的正确方法是啥?【英文标题】:What's the right way to access sharepoint folders and files in C# using pnp.core and pnp.framework?使用 pnp.core 和 pnp.framework 在 C# 中访问共享点文件夹和文件的正确方法是什么? 【发布时间】:2022-01-03 14:15:29 【问题描述】:

我需要处理存储在我的 c# 应用程序的 SharePoint 文件夹中的一些文件,但是 atm 我找不到正确的方法来执行此操作。我使用 Microsoft.sharepoint.client、pnp.core 和 pnp.framework 作为库,我的代码类似于:

            string DocLibrary = "Documents";
        
        try
        
            using (var clientContext = new AuthenticationManager().GetACSAppOnlyContext(siteUrl, clientId, clientSecret))
            
                Web web = clientContext.Web;
                List DocumentLibrary = web.Lists.GetByTitle(DocLibrary);

                clientContext.Load(web, w => w.Title);
                clientContext.Load(DocumentLibrary);

                clientContext.ExecuteQuery();
                
                
                //part where I need to access the files
             

                
            
        
        catch (Exception exp)
        
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(exp.Message + Environment.NewLine + exp.StackTrace);
        
        finally
        
            Console.ReadLine();
        

假设我需要访问文件夹的 URL 是“https://teamsite.msc.com/sites/mysite/Shared%20Documents/General/TestFolder/” 有没有办法直接访问文件夹?因为我发现访问它的唯一方法是执行以下操作:

                clientContext.Load(DocumentLibrary.RootFolder);
                clientContext.Load(DocumentLibrary.RootFolder.Folders);
                clientContext.ExecuteQuery();
                
                FolderCollection fcol = DocumentLibrary.RootFolder.Folders;
                foreach (Folder f in fcol)
                
                    clientContext.Load(f);
                    clientContext.ExecuteQuery();
                    If(f.name="General")
                         //iteration on folder and files
                    
                    
                

据我所知,这种方法很糟糕。

【问题讨论】:

【参考方案1】:

您可以使用clientContext.Web.GetFolderByServerRelativeUrl直接获取文件夹。

见Working with folders and files

【讨论】:

好的,谢谢,现在我可以使用 GetFileByServerRelativeUrl 检索文件夹,甚至文件。但是在 Sharepoint.Client.FIle 上读取或写入的正确方法是什么。可能这是一个愚蠢的问题,但我找不到太多关于它的文档。 最简单的方法是 File.SaveBinaryDirect。您不需要任何 Client.File ,只需要 URL 和数据。 docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/…(有例子)

以上是关于使用 pnp.core 和 pnp.framework 在 C# 中访问共享点文件夹和文件的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 php 和 mysql 使用纬度和经度进行几何搜索

Cocoa - 为啥使用 NSInteger 和 CGFloat 而不是使用 int 和 float,或者总是使用 NSNumber?

HTTPS和SSH方式的区别和使用

学习和使用SVN和GitHub——开篇

CPU使用率和正在使用的内存之间有啥关系?

使用 Express 和 GraphQL 而不是简单地使用 Node.js 和 GraphtQL 有啥好处?