Saltar al contenido

Sharepoint: ¿cómo verificar si el archivo o la carpeta existen en la biblioteca de documentos de SharePoint usando el modelo de objetos del cliente?

Contamos con tu ayuda para difundir nuestros escritos sobre las ciencias informáticas.

Solución:

El siguiente método de extensión demuestra cómo determinar si el archivo existe o no:

using Microsoft.SharePoint.Client;

namespace SharePoint.Client.Extensions

    public static class WebExtensions
    
        public static bool TryGetFileByServerRelativeUrl(this Web web, string serverRelativeUrl, out File file)
        
            var ctx = web.Context;
            try
            
                file = web.GetFileByServerRelativeUrl(serverRelativeUrl);
                ctx.Load(file);
                ctx.ExecuteQuery();
                return true;
            
            catch (ServerException ex)
            
                if (ex.ServerErrorTypeName == "System.IO.FileNotFoundException")
                
                    file = null;
                    return false;
                
                throw;
            
        
    

Puntos clave:

Si el archivo no existe, se encuentra la excepción Microsoft.SharePoint.Client.ServerException, este enfoque demuestra una de confianza forma de determinar si el archivo existe o no

Uso

using(var ctx = GetContext(webUri, userName, password))

   File file;
   if (ctx.Web.TryGetFileByServerRelativeUrl( "/documents/SharePoint User Guide.docx", out file))
   
     //...
   

He visto muchas referencias a file.Exists no funciona en CSOM, pero el problema generalmente se produce al intentar hacer context.Load (file). Si el archivo no existe, no puede cargar el archivo, por lo que la prueba misma rompe el resultado.

Sin embargo, el siguiente código funciona.

var file = web.GetFileByServerRelativeUrl(serverRelativeUrl);
web.Context.Load(file, f => f => f.Exists); // Only load the Exists property
web.Context.ExecuteQuery();
return file.Exists;

La carpeta existe:

FolderCollection folders = list.RootFolder.Folders;

ctx.Load(folders, fl => fl.Include(ct => ct.Name)
.Where(ct => ct.Name == "MyFolder"));

ctx.ExecuteQuery();

return folders.Any();

Reseñas y valoraciones del tutorial

Recuerda que puedes comunicar esta crónica si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *