leebongee
leebongee

Reputation: 103

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

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

Upvotes: 2

Views: 2191

Answers (1)

Jerry
Jerry

Reputation: 3615

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

Upvotes: 3

Related Questions