SharePointでDocument Libraryドキュメントライブラリデータをローカルにバックアップ

5421 ワード

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を独学し始めたばかりで、少し分かりやすい理解で、討論と指導を歓迎します.