카테고리 없음

[공유 지점] SharePoint 2007, 문서 라이브러리에 폴더가 있는지 확인하는 방법

행복을전해요 2021. 1. 6. 22:10

어쨌든, 나는 당신의 질문을 이해하지 못합니다. 첫 번째 문장은 웹 서비스를 사용하고 있음을 나타냅니다 (일반적으로 SharePoint에서 제공하는 SOAP 웹 서비스로 이해합니다). 다음은 완전히 다른 프로토콜 인 WebDAV를 사용하고 있다고 말합니다.

따라서 WebDAV는 "탐색기 모드"를 열면 "Windows 탐색기"가 SharePoint에 액세스하는 데 사용하는 프로토콜입니다. 이러한 모든 요청은 실제로 HTTP 요청이므로 "Fiddler"도구를 사용하여 해당 요청을 감시 할 수 있습니다 .

폴더를 열기 전에 Windows 탐색기가 해당 폴더가있는 경우 공유 점을 쿼리하려고합니다. 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이지만 다음과 같은 항목이 포함됨) :

<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>
                                                                                                                                                                      

포함 된 요소가 폴더 인 경우 "D : isFolder"값 "t"가 있어야합니다. 이렇게하면 부모 폴더에 만들려는 폴더가 포함되어 있는지 확인할 수 있습니다.

편집 : 먼저 결과 스트림을 읽고 결과를 조금 파싱하는 작은 C # 샘플을 만들었습니다. 목록에 필요한 폴더가 있는지 여부를 확인하려면 더 나은 방법을 찾아야합니다.

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();
                                                                                                                                                            }
                                                                                                                                                            
-------------------

필요하지 않습니다. 이미 존재하는 경우 해당 이름으로 새 폴더를 만들려고하면 "자동으로"이미 존재하는 폴더가 반환됩니다.



출처
https://stackoverflow.com/questions/2005855