2008-12-11 33 views

Trả lời

27

Bạn có thể, nếu bạn biết địa chỉ URL cũng sử dụng tài sản SPFile.Exists như sau:

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

Một sẽ về suy nghĩ đầu tiên giả SPWeb.GetFile ném một ngoại lệ nếu các tập tin không tồn tại. Nhưng như bạn thấy đây không phải là trường hợp - nó sẽ thực sự trả về một đối tượng SPFile.

+0

Làm việc đối với tôi, Cảm ơn – User5590

1

Sử dụng một truy vấn CAML là cách hiệu quả nhất (example here)

CAML có thể là một chút khó sử dụng, vì vậy cũng đáng để xem xét các nhà cung cấp Linq to Sharepoint, mà giấu các chi tiết của CAML xa bạn.

10

Nhưng nếu bạn đang sử dụng SP 2010 Khách hàng OM, nó sẽ thực sự ném một ngoại lệ nếu các tập tin không tồn tại:

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

Ngoại lệ thường do sự cố gắng để làm bối cảnh .Tải tập tin). Nếu tệp không tồn tại, bạn không thể tải đối tượng đầy đủ để bản thân kiểm tra sẽ phá vỡ kết quả. Ngoại lệ sẽ không bị ném nếu bạn thay thế clientContext.Load (tệp) bằng clientContext.Load (tệp, f => f.Exists). –

Các vấn đề liên quan