2013-08-28 47 views
3

我有一個連接到SharePoint Web服務下面的代碼:SPFolder.Exists如果它確實存在返回false

string response = string.Empty; 

SPSecurity.RunWithElevatedPrivileges(new SPSecurity.CodeToRunElevated(delegate() 
{ 
    using (SPSite spsite = new SPSite("http://sharepoint/")) 
    { 
     using (SPWeb spweb = spsite.OpenWeb("sites/" + site)) 
     { 
      spweb.AllowUnsafeUpdates = true; 

      SPFolder spfolder = spweb.GetFolder(path); 

      /* The following value will always be set to FALSE 
      * but the next time spfolder.Exists is called, the 
      * returned value will be true. 
      */ 
      //bool exists = spfolder.Exists; 

      if (spfolder == null || !spfolder.Exists) 
       response = "Folder Does Not Exist!"; 
      else 
       response = "Folder Exists!"; 
     } 
    } 
} 

return response; 

如果我調試它,因爲它是上面的代碼工作完全正常步逐從頂部開始。如果我在沒有調試的情況下運行它,或者稍後在代碼中放置了斷點,則SPFolder.Exists值始終設置爲false,實際上,它應該是true。如果我取消上述bool exists行的註釋,那麼它將正常工作。

我在這裏做錯了嗎?

回答

1

潛在答案:索要SPFolder一些更有趣的屬性第一,甚至致電ToString就足夠了(可能是因爲它在那裏調試時ToString你將鼠標懸停在spFolder變量將被調用)。

+1

嗯,是的,它只是SharePoint中。 :-) –

1

那麼我想出了問題所在。顯然,您只能在SPSite對象和SPWeb的網站/子網站中指定網站集。我試圖做的是打開一個網站,它是另一個網站集的根網站。

這個article幫我弄明白了。

更改代碼這樣的事情解決了這個問題:

// Specify ONLY the site collection here 
using (SPSite spsitecollection = new SPSite("http://sharepoint/sites/" + srcSiteCollection)) 
{ 
    // Specify the site/subsite 
    using (SPWeb spweb = spsitecollection.OpenWeb(srcSite)) 
    { 

     spweb.AllowUnsafeUpdates = true; 

     SPFolder spfolder = spweb.GetFolder(path); 

     // No errors anymore! 
     if (spfolder == null || !spfolder.Exists) 
      response = "Folder Does Not Exist!"; 
     else 
      response = "Folder Exists!"; 
    } 
} 
相關問題