"Object reference not set to an instance of an object on server. The object is associated with property File" when read file from SharePoint

1.9k views Asked by At

I've read file from url sharepoint and it returns that error:

Object reference not set to an instance of an object on server. The object is associated with property File

I've tried to count number of file in this folder url so it could count true, but when I printing the file name, it had error at line this.lblMessage.Text = listItems.First().File.Name.ToString();

This is my code:

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();
1

There are 1 answers

1
Jerry On BEST ANSWER

Use Caml Query to filter only files in the library as item.File.Name is used for File not Folder:

                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);