Как определить, существует ли файл в SharePoint SPFolder [закрыто]

Есть ли способ, отличный от циклического перемещения по файлам в SPFolder, чтобы определить, существует ли заданное имя файла (строка)?

11.12.2008 15:13:54
3 ОТВЕТА
РЕШЕНИЕ

Если вы знаете URL-адрес, вы также можете использовать свойство SPFile.Exists следующим образом:

using (SPSite site = new SPSite("http://server/site"))
using (SPWeb web = site.OpenWeb())
{
  SPFile file = web.GetFile("/site/doclib/folder/filename.ext");
  if (file.Exists)
  {
    ...
  }
}

Можно было бы сначала подумать, что SPWeb.GetFile выдает исключение, если файл не существует. Но, как вы видите, это не так - он на самом деле возвращает объект SPFile.

28
12.12.2008 19:26:57
Работал на меня, спасибо
User5590 18.10.2016 09:25:29

Использование CAML- запроса является наиболее эффективным способом ( пример здесь )

CAML может быть немного громоздким, поэтому стоит также обратиться к провайдеру Linq to Sharepoint , который скрывает от вас детали CAML.

1
11.12.2008 15:23:49

Но если вы используете SP 2010 Client OM, он на самом деле выдает исключение, если файл не существует:

using(var clientContext = new ClientContext(site))
{
     Web web = clientContext.Web;
     Microsoft.SharePoint.Client.File file = web.GetFileByServerRelativeUrl("/site/doclib/folder/filename.ext");
     bool bExists = false;
     try
     {
         clientContext.Load(file);
         clientContext.ExecuteQuery(); //Raises exception if the file doesn't exist
         bExists = file.Exists;  //may not be needed - here for good measure
     }
     catch{   }

     if (bExists )
     {
           .
           .
     }
}
10
10.02.2012 12:22:09
Исключение обычно вызывается попыткой сделать context.Load (файл). Если файл не существует, вы не можете загрузить полный объект, поэтому сам тест нарушает результат. Исключение не будет выдано, если вы замените clientContext.Load (файл) на clientContext.Load (файл, f => f.Exists).
Martin D 24.01.2017 20:20:23