2009-12-22 159 views
1

這是我目前的功能。它用於在SharePoint中的文檔庫中創建文件夾,但使用網絡dav功能,這比MOSS更容易。WebDav如何檢查文件夾是否存在?

我需要找到一種方法來可靠地確定文件夾是否已經存在...現在注意我依賴於該try catch,但這意味着ANY協議異常不會拋出錯誤,所以它不是一個可靠的函數。如果文件夾存在,我如何檢查使用網頁dav?

private void createFolderUsingWebDav(string siteAddress, string listAddress, string folderName) 
     { 
      //Check Databox Folder Exists 
      string folderAddress = siteAddress + @"/" + listAddress + @"/" + folderName; 
      HttpWebResponse response; 
      try 
      { 
       HttpWebRequest request = (System.Net.HttpWebRequest)HttpWebRequest.Create(folderAddress); 
       request.Credentials = wsLists.Credentials; // CredentialCache.DefaultCredentials; 
       request.Method = "MKCOL"; 
       response = (System.Net.HttpWebResponse)request.GetResponse(); 
       response.Close(); 
      } 
      catch (WebException ex) 
      { 
       if (ex.Status != WebExceptionStatus.ProtocolError) 
       { 
        throw ex; 
       } 
      } 
     } 

基本上我想要的這是什麼產品達到這裏展開的版本: http://www.independentsoft.de/webdav/tutorial/exists.html

回答

3

如果您對url執行PROPFIND,如果該文件夾不存在,您將返回404。

充分利用PROPFIND看起來像這樣(只顯示相關的報頭)

PROPFIND /yourfolder HTTP/1.1 
Content-Type: application/xml 

<?xml version="1.0"?> 
<propfind xmlns="DAV:"> 
    <prop> 
     <resourcetype /> 
    </prop> 
</propfind> 

404意味着資源不存在,207意味着它。

+0

207,而不是217.請參閱RFC 4918. 要檢查是否存在文件夾,您還只想獲取DAV:resourcetype屬性,而不是所有屬性(可以要貴得多)。 – 2009-12-23 09:02:23

+0

thnx我做了那些編輯 – Evert 2009-12-24 05:04:04

+0

我該如何在C#中實際執行此操作? – 2010-01-05 11:25:48

0

PROPFIND是你的朋友:在DAV:資源型物業(http://greenbytes.de/tech/webdav/rfc4918.html#rfc.section.15.9)具有DAV:對集合收集子元素。只需使用PROP:DAVF:allprop或DAV:prop(均在http://greenbytes.de/tech/webdav/rfc4918.html#rfc.section.9中描述)檢索它。

+0

你能提供一個例子嗎?我需要一些我可以很快實現的...感謝... – 2009-12-22 18:30:30

+0

協議示例在RFC 4918,第9.1節。 – 2009-12-23 09:00:59

+0

這不是特別有用... – 2011-02-16 17:02:31

相關問題