从SharePoint读取文件时,“对象引用未设置为服务器上对象的实例该对象与属性File关联”

问题描述

我已从URL共享点读取文件,它返回了该错误

对象引用未设置为服务器上对象的实例。的 对象与属性File相关联

我试图计算此文件夹url中的文件数,因此它可以计算为true,但是当我打印文件名时,它在第this.lblMessage.Text = listItems.First().File.Name.ToString();行有错误

这是我的代码

var targetSiteURL = new Uri("https://mycompany.sharepoint.com/sites/test");
ClientContext cxt = new ClientContext(targetSiteURL.GetLeftPart(UriPartial.Authority));
cxt.Credentials = new SharePointOnlineCredentials(login,securePassword);
                    
var list = cxt.Web.GetList("/sites/test/Shared%20Documents");

var listItems = list.GetItems(new CamlQuery());
cxt.Load(listItems,items => items.Include(
item => item.File));
cxt.ExecuteQuery();                    
this.lblMessage.Text = listItems.First().File.Name.ToString();

解决方法

使用Caml查询仅将库中的文件作为项过滤。File.Name用于文件而非文件夹:

                var list = cxt.Web.GetList("/sites/test/Shared%20Documents");
                Microsoft.SharePoint.Client.CamlQuery camlQuery = new CamlQuery();
                camlQuery.ViewXml =
                   @"<View Scope='RecursiveAll'>  
                    <Query> 
                       <Where><Eq><FieldRef Name='FSObjType' /><Value Type='Integer'>0</Value></Eq></Where> 
                    </Query> 
                    </View>";
                var listItems = list.GetItems(camlQuery);
                cxt.Load(listItems,items => items.Include(item => item.File));
                cxt.ExecuteQuery();
               Console.WriteLine(listItems.First().File.Name);