2008-12-11 11 views
16

में मौजूद है या नहीं, यह निर्धारित करने के लिए कि कोई फ़ाइल नाम (स्ट्रिंग) मौजूद है या नहीं, यह निर्धारित करने के लिए कोई SPFolder में फ़ाइलों के माध्यम से लूप करने के अलावा कोई तरीका है?यह निर्धारित करने के लिए कि कोई फ़ाइल किसी SharePoint SPFolder

उत्तर

27

आप, यदि आप 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 एक अपवाद फेंकता है तो फाइल मौजूद नहीं है मान लेते हैं। लेकिन जैसा कि आप देखते हैं कि यह मामला नहीं है - यह वास्तव में एक एसपीफ़ाइल ऑब्जेक्ट वापस कर देगा।

+0

मेरे लिए काम किया, धन्यवाद – User5590

1

एक CAML क्वेरी का उपयोग करना सबसे कारगर तरीका (example here)

है

CAML थोड़ा बोझल, तो भी लायक Linq to Sharepoint प्रदाता है, जो CAML का ब्यौरा तुम से दूर छुपाता को देखकर हो सकता है।

10

लेकिन अगर आप सपा 2010 क्लायंट ओम उपयोग कर रहे हैं, यह वास्तव में यदि फ़ाइल मौजूद नहीं है एक अपवाद फेंक होगा:

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

अपवाद आम तौर पर कारण होता है संदर्भ करने के लिए कोशिश कर रहा द्वारा ।फाइल लोड करो)। अगर फ़ाइल मौजूद नहीं है तो आप पूर्ण ऑब्जेक्ट लोड नहीं कर सकते हैं, इसलिए परीक्षण स्वयं परिणाम को तोड़ देता है। यदि आप clientContext.Load (फ़ाइल) क्लाइंट Context.Load (फ़ाइल, f => f.Exists) के साथ प्रतिस्थापित करते हैं तो अपवाद नहीं फेंक दिया जाएगा। –

संबंधित मुद्दे