代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

WebDAV如何检查文件夹是否存在?

  •  1
  • JL. Hans Passant  · 技术社区  · 15 年前

    这是我下面的当前功能。它用于在SharePoint中的文档库中创建文件夹,但使用Web DAV功能,这比Moss功能更简单。

    我需要找到一种可靠的方法来确定文件夹是否已经存在…注意,现在我依赖于try catch,但这意味着任何协议异常都不会引发错误,因此它不是一个可靠的函数。如果文件夹存在,如何使用Web 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

    2 回复  |  直到 13 年前
        1
  •  4
  •   Evert    15 年前

    如果在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表示资源存在。

        2
  •  0
  •   Julian Reschke    13 年前

    propfind是您的朋友:dav:resourcetype属性( http://greenbytes.de/tech/webdav/rfc4918.html#rfc.section.15.9 )具有集合的dav:collection子元素。只需使用propfind和dav:allprop或dav:prop检索它(都在 http://greenbytes.de/tech/webdav/rfc4918.html#rfc.section.9 )。