Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebDav如何检查文件夹是否存在?_C#_Webdav - Fatal编程技术网

C# WebDav如何检查文件夹是否存在?

C# WebDav如何检查文件夹是否存在?,c#,webdav,C#,Webdav,下面是我当前的功能。它用于在SharePoint的文档库中创建文件夹,但使用web dav功能,这比MOSS更容易 我需要找到一种可靠的方法来确定文件夹是否已经存在。。。请注意,现在我依赖于try-catch,但这意味着任何协议异常都不会抛出错误,因此它不是一个可靠的函数。如果存在文件夹,如何使用web dav进行检查 private void createFolderUsingWebDav(string siteAddress, string listAddress, string folde

下面是我当前的功能。它用于在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;
                }
            }
        }
基本上,我想要本产品在这里实现的未包装版本:
PROPFIND是您的朋友:DAV:resourcetype属性()有一个用于集合的DAV:collection子元素。只需使用PROPFIND和DAV:allprop或DAV:prop(两者都在中介绍)检索它。

PROPFIND是您的朋友:DAV:resourcetype属性()有一个用于集合的DAV:collection子元素。只需使用PROPFIND和DAV:allprop或DAV:prop(均在中描述)检索它。

如果您对url执行PROPFIND,则如果该文件夹不存在,您将返回404

使PROPFIND看起来像这样(只显示相关的标题)

PROPFIND/yourfolder HTTP/1.1
内容类型:application/xml

404表示资源不存在,207表示资源存在。

如果您在url上执行PROPFIND,则如果文件夹不存在,您将返回404

使PROPFIND看起来像这样(只显示相关的标题)

PROPFIND/yourfolder HTTP/1.1
内容类型:application/xml

404表示资源不存在,207表示资源存在。

您能否提供一个示例。。。我需要一些我可以很快实现的东西。。。谢谢…协议示例见RFC 4918第9.1节。您是否可以提供一个示例。。。我需要一些我可以很快实现的东西。。。谢谢…协议示例见RFC 4918第9.1.207节,而非217节。见RFC 4918。为了只检查是否存在文件夹,您还希望只获取DAV:resourcetype属性,而不是所有属性(这可能要昂贵得多)。如何在C#中实际实现这一点?我不是C#人,但我希望它与您的MKCOL请求极其相似。只需添加xml正文和内容类型标题,就应该进行设置。我认为,还应该添加
Depth:0
标题以提高性能。@AdrianBaker如果您使用的服务器发出404指示服务器未准备好处理请求,那么它就是一个有缺陷的服务器。这是不标准的,不要这样做。见RFC 4918。为了只检查是否存在文件夹,您还希望只获取DAV:resourcetype属性,而不是所有属性(这可能要昂贵得多)。如何在C#中实际实现这一点?我不是C#人,但我希望它与您的MKCOL请求极其相似。只需添加xml正文和内容类型标题,就应该进行设置。我认为,还应该添加
Depth:0
标题以提高性能。@AdrianBaker如果您使用的服务器发出404指示服务器未准备好处理请求,那么它就是一个有缺陷的服务器。这是不标准的,不要这样做。
PROPFIND /yourfolder HTTP/1.1
Content-Type: application/xml

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