SharePoint에서 Document Library 문서 라이브러리 데이터를 로컬로 백업

5494 단어 SharePoint
1. SharePoint의 Site와 RootWeb을 얻고 문서 라이브러리를 원하며 지정한 디렉터리 파일 아래에 폴더를 만듭니다.   
#region       
        /// 
        ///              SiteUrL   Shared Documents
        /// 
        /// SiteUrl
        ///        
        public void CreateDirectoryTree(string siteUrl, string destinationPath)
        {
            using (SPSite mySite = new SPSite(siteUrl))
            {
                using (SPWeb myWeb = mySite.RootWeb)
                {
                    string tempDirectory = destinationPath;
                    SPList myList = myWeb.Lists["Documents"];
                    //               
                    SPFolder myFolder = myList.RootFolder;
                    DirectoryInfo myDirectory = new DirectoryInfo(tempDirectory);
                    if (myDirectory.Exists)
                    {
                        tempDirectory += "\\" + "Web";
                        if (!Directory.Exists(tempDirectory))
                        {
                            myDirectory.CreateSubdirectory("Web");
                        }
                        tempDirectory += "\\" + "Library";
                        if (!Directory.Exists(tempDirectory))
                        {
                            Directory.CreateDirectory(tempDirectory);
                        }
                        tempDirectory += "\\" + myFolder.Name.ToString();
                        if (!Directory.Exists(tempDirectory))
                        {
                            Directory.CreateDirectory(tempDirectory);
                        }
                        CreateSubDirectory(myFolder, tempDirectory);
                    }
                    // Console.WriteLine(myFolder.Name);
                }
            }
        }
#endregion

2. 먼저 문서 라이브러리 아래의 1층의 하위 폴더와 하위 파일을 훑어본다. 여기에Forms라는 숨겨진 파일을 필터한 다음에 모든 하위 폴더와 하위 파일을 반복해서 훑어본다. 또한 큰 파일 백업의 상황을 고려해야 한다(폴더와 파일의 존재 여부를 판정하고 처리했다).
        /// 
        ///                
        /// 
        ///     ,                
        ///         
        public void CreateSubDirectory(SPFolder myFolder, string destinationPath)
        {
            SPList myList = myFolder.DocumentLibrary;
            int myListLength = myList.Items.Count;
            SPListItem myListItem = myList.Items[0];
            string tempPath = destinationPath;
            SPFolderCollection myFolderCollection = myFolder.SubFolders;
            SPFileCollection myFileCollection = myFolder.Files;
            int subFolderLength = myFolderCollection.Count;
            int subFileLength = myFileCollection.Count;
            if (subFolderLength > 0 || subFileLength > 0)
            {
                if (subFolderLength > 0)
                {
                    for (int i = 0; i < subFolderLength; i++)
                    {
                        if (myFolderCollection[i].Name != "Forms")
                        {
                            tempPath += "\\" + myFolderCollection[i].Name;
                            if (!Directory.Exists(tempPath))
                            {
                                Directory.CreateDirectory(tempPath);
                            }
                            CreateSubDirectory(myFolderCollection[i], tempPath);
                        }
                    }
                }
                foreach (SPFile item in myFileCollection)
                {
                    DirectoryInfo myDirectoryInfo = new DirectoryInfo(destinationPath);
                    string tempFilePath = destinationPath;
                    tempFilePath += "\\" + item.Name;
                    if (File.Exists(tempFilePath))
                    {
                        File.Delete(tempFilePath);
                    }
                    using (FileStream myFileStream = new FileStream(tempFilePath, FileMode.Create, FileAccess.Write))
                    {
                        const int bufferSize = 4 * 1024 * 1024;
                        //byte[] fileContentBuffer = new byte[bufferSize];
                        byte[] fileContent = item.OpenBinary();
                        int num = fileContent.Length / bufferSize;
                        int data = fileContent.Length % bufferSize;
                        int start = 0;
                        while (start < num)
                        {
                            myFileStream.Write(fileContent, start * bufferSize, bufferSize);
                            start++;
                        }
                        myFileStream.Write(fileContent, start * bufferSize, data);
                    }
                    for (int a = 0; a < myListLength; a++)
                    {
                        if (myList.Items[a].Name == item.Name)
                        {
                            myListItem = myList.Items[a];
                            break;
                        }
                    }

                    myListItem["Source Path"] = tempFilePath;
                    myListItem.Update();
                    tempFilePath = destinationPath;
                }
            }
        }

3. 그리고 약간의 이상 처리가 필요합니다. 여기에 추가하지 않았습니다. 자신이 사용할 때 추가할 수 있습니다.이상은 순전히 개인이 SharePoint를 처음 독학하기 시작한 것으로 간단명료한 이해입니다. 토론과 지도를 환영합니다.

좋은 웹페이지 즐겨찾기