Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.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
SharePoint 2007,如何检查文档库中是否存在文件夹_Sharepoint_Wss - Fatal编程技术网

SharePoint 2007,如何检查文档库中是否存在文件夹

SharePoint 2007,如何检查文档库中是否存在文件夹,sharepoint,wss,Sharepoint,Wss,我正在通过其web服务访问SharePoint。。。这是有点有限,因此我已经转向WebDav执行一些创建文件夹的功能 我有一个文档库,我将使用webdav创建一个文件夹,但我在internet或其他任何地方都找不到任何关于如何使用webdav检查文件夹是否已存在的文档,因此是否有方法检查SharePoint中的文档库中是否存在文件夹,欢迎使用任何黑客和斜杠方法 你不知道;不需要,如果它已经存在,尝试创建一个具有该名称的新文件夹将“静默”返回已经存在的文件夹。不知怎的,我不明白你的问题。第一句话说

我正在通过其web服务访问SharePoint。。。这是有点有限,因此我已经转向WebDav执行一些创建文件夹的功能


我有一个文档库,我将使用webdav创建一个文件夹,但我在internet或其他任何地方都找不到任何关于如何使用webdav检查文件夹是否已存在的文档,因此是否有方法检查SharePoint中的文档库中是否存在文件夹,欢迎使用任何黑客和斜杠方法

你不知道;不需要,如果它已经存在,尝试创建一个具有该名称的新文件夹将“静默”返回已经存在的文件夹。

不知怎的,我不明白你的问题。第一句话说明您正在使用web服务(我通常将其理解为SharePoint提供的SOAP web服务)。下一个说您正在使用WebDAV,这是一个完全不同的协议

因此,WebDAV是“Windows资源管理器”用于访问SharePoint的协议,如果您以“资源管理器模式”打开它。由于所有这些请求实际上都是HTTP请求,因此可以使用

我相信,在打开文件夹之前,Windows资源管理器会尝试查询sharepoint(如果存在这样的文件夹)。如果我试图通过windows资源管理器打开一个非当前路径
\\mysrv\sites\myweb\mylib\notthere
(但是
\\mysrv\sites\myweb\mylib
是一个现有的文档库!),我看到的最后一个HTTP调用是:

PROPFIND /sites/myweb/mylib HTTP/1.1
User-Agent: Microsoft-WebDAV-MiniRedir/6.1.7600
Depth: 1
translate: f
其中SharePoint的响应为:此文件夹中的子文件夹和页面列表(非常长的XML,但它包含以下内容):


你能提供一个C#样本,说明如何以实际的方式使用这些信息吗?非常感谢奈维斯特的学者们,你说得对。真棒的代码,再次感谢!!!欢迎:-)这对我来说也是一个有趣的调查,因为我从未使用WebDAV访问SharePoint网站。最后一个问题。。。如果我将URL传递到文件夹,并将深度设置为1。。。那么,如果响应成功,那么文件夹肯定存在。。。我不需要遍历XML节点集合,对吗?是的,我在这里发布代码几分钟后就想到了这一点。我想这一定是你描述它的方式,但我没有检查。如果文件夹不存在,SharePoint也可能返回404错误(因为您试图读取其属性的资源不存在)
<D:multistatus
    xmlns:D="DAV:"
    xmlns:Office="urn:schemas-microsoft-com:office:office"
    xmlns:Repl="http://schemas.microsoft.com/repl/"
    xmlns:Z="urn:schemas-microsoft-com:">
  <D:response>
    <D:href>http://sites/myweb/mylib</D:href>
    <D:propstat>
      <D:prop>
        <D:displayname>mylib</D:displayname>
        <D:lockdiscovery/>
        <D:supportedlock/>
        <D:isFolder>t</D:isFolder>
        <D:iscollection>1</D:iscollection>
        <D:ishidden>0</D:ishidden>
        <D:getcontenttype>application/octet-stream</D:getcontenttype>
        <D:getcontentlength>0</D:getcontentlength>
        <D:resourcetype>
          <D:collection/>
        </D:resourcetype>
        <Repl:authoritative-directory>t</Repl:authoritative-directory>
        <D:getlastmodified>2009-12-07T09:07:19Z</D:getlastmodified>
        <D:creationdate>2009-11-06T13:30:26Z</D:creationdate>
      </D:prop>
      <D:status>HTTP/1.1 200 OK</D:status>
    </D:propstat>
  </D:response>
  <!---List of other <D:response> elements -->
</D:multistatus>
System.Net.HttpWebRequest oReq;
string sUrl = "http://yoursite/sites/somesite/DocumentLibrary";
oReq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(sUrl);

oReq.Method = "PROPFIND";
oReq.Credentials = System.Net.CredentialCache.DefaultCredentials;
oReq.AllowAutoRedirect = true;
oReq.UserAgent = "Microsoft-WebDAV-MiniRedir/6.1.7600";

//this causes all of the items to be enumerated, 
//if it is 0, only the folder itself is returned in the response
oReq.Headers["Depth"] = "1";
oReq.Headers["translate"] = "f";
System.IO.StreamWriter oRequest =
        new System.IO.StreamWriter(oReq.GetRequestStream());
oRequest.WriteLine();
oRequest.Close();
System.IO.StreamReader oResponse =
        new System.IO.StreamReader(oReq.GetResponse().GetResponseStream());
string sResponse = oResponse.ReadToEnd();
oResponse.Close();

//done with the webclient stuff, check the results

System.Xml.XmlDocument oMyDoc = new System.Xml.XmlDocument();
oMyDoc.LoadXml(sResponse);
System.Xml.XmlNamespaceManager oNsMgr =
        new System.Xml.XmlNamespaceManager(oMyDoc.NameTable);
oNsMgr.AddNamespace("D", "DAV:");

System.Xml.XmlNodeList oAllResponses =
        oMyDoc.SelectNodes(".//D:multistatus/D:response", oNsMgr);

foreach (System.Xml.XmlNode oNode in oAllResponses)
{
    Console.WriteLine("Name: " + 
                      oNode.SelectSingleNode("./D:propstat/D:prop/D:displayname",
                      oNsMgr).InnerText);

    if (oNode.SelectNodes("./D:propstat/D:prop/D:isFolder", oNsMgr).Count > 0)
    {
        Console.WriteLine("Is folder: " + 
                oNode.SelectSingleNode("./D:propstat/D:prop/D:isFolder", 
                oNsMgr).InnerText);
    }
    else
    {
        Console.WriteLine("Is folder: f");
    }
    Console.WriteLine();
}