sharepointsharepoint-onlinesharepoint-deployment

How to check if file exists in SharePoint online?


I'm working with SharePoint online and using code I need to check if file exists or not. Please don't I don't need to download file. My code will use its URL if file exist so no need to download it.

Below code tries to download file which I don't want:

class Program
{
    static void Main(string[] args)
    {
        string Web = @”https://domain/sitecollection/“;
        string FileName = @”/Sitecollection/Records/file.txt”;
        
        ClientContext clientContext = new ClientContext(Web);
        Web site = clientContext.Web;

        if (TryGetFileByServerRelativeUrl(site, FileName)) Console.WriteLine(“File exists”); elseConsole.WriteLine(“File does not exist”);
        Console.ReadLine();
    }

    public static bool TryGetFileByServerRelativeUrl(Web web, string serverRelativeUrl)
    {
        var ctx = web.Context;
        try
        {
            File file = web.GetFileByServerRelativeUrl(serverRelativeUrl);
            ctx.Load(file);
            ctx.ExecuteQuery();
            return true;
        }
        catch (Microsoft.SharePoint.Client.ServerException ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(ex.Message);
            if (ex.ServerErrorTypeName == “System.IO.FileNotFoundException”)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(ex.Message);
                return false;
            }
            return false;
        }
        catch (Exception exp)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(exp.Message);
            return false;
        }
    }
}

Please help how can I check if a file exists without downloading it.


Solution

  • Use CAML query to query based on file url.

        var query = new CamlQuery();
        query.ViewXml = string.Format("<View Scope=\"RecursiveAll\"><Query><Where><Eq><FieldRef Name=\"FileRef\"/><Value Type=\"Url\">{0}</Value></Eq></Where></Query></View>",fileUrl);
        var items = list.GetItems(query);
        ctx.Load(items);
        ctx.ExecuteQuery();
        return items.Count > 0;