2008-12-11 13 views

Odpowiedz

27

Można, jeśli znasz adres URL również użyć właściwości SPFile.Exists następująco:

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) 
    { 
    ... 
    } 
} 

Można by na pierwszej myśli zakładać SPWeb.GetFile zgłasza wyjątek, jeśli plik nie istnieje. Ale jak widzisz, tak nie jest - zwróci obiekt SPFile.

+0

pracował dla mnie, dzięki – User5590

1

Korzystanie z CAML zapytanie jest najbardziej efektywny sposób (example here)

CAML może być nieco niewygodne, tak też warto przyjrzeć dostawcy Linq to Sharepoint, który ukrywa szczegóły CAML z dala od ciebie.

10

Ale jeśli używasz SP 2010 OM klienta, to rzeczywiście wyjątek, jeśli plik nie istnieje:

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) 
    { 
      . 
      . 
    } 
} 
+0

Wyjątkiem jest zwykle spowodowane przez próbuje zrobić kontekst .Załaduj plik). Jeśli plik nie istnieje, nie można wczytać całego obiektu, więc sam test spowoduje przerwanie wyniku. Wyjątek nie zostanie zgłoszony, jeśli zastąpisz plik clientContext.Load (plik) przez clientContext.Load (file, f => f.Exists). –

Powiązane problemy