delete - grothauser/sharepointsnippets GitHub Wiki

private void SolveConflict(SPList sourceLibrary, SPWeb web, SPList destLibrary, SPListItem sourceFolder, SPList companiesInDestLib, String companyMainName, SPListItemCollection destFolders) {

        SPFileCollection destinationFileColletion = destFolders[0].Folder.Files;
        List<SPFile> destinationFiles = ToList(destinationFileColletion);

        SPFileCollection sourceFileColletion = sourceFolder.Folder.Files;
        List<SPFile> sourceFiles = ToList(sourceFileColletion);

        if (Replace.Checked) //replace whole project
        {
            ReplaceFolder(sourceLibrary, web, destLibrary, sourceFolder, companiesInDestLib, companyMainName, destFolders);
        }
        else if (MergeNewer.Checked)//means to just keep the newer one but merge missing files into
        {
            //get all files from destination folder and from sourcefolder
            List<SPFile> duplicatedFilesToRemove = new List<SPFile>();
            List<SPFile> duplicatedFilesToCopy = new List<SPFile>();
            List<SPFile> remainingFiles = new List<SPFile>();

            //look for files already in destination : !! TODO: check for category and date modified (properties?)
            foreach(SPFile srcFile in sourceFiles)
            {
                //ist nur ein duplikat wenn category + subkategorie gleich sind 
                SPFile duplicateCandidate = destinationFiles.Find(destFile => destFile.Name == srcFile.Name);
                SPFile duplicate = null; //will be deleted and replaced

                if (duplicateCandidate != null)
                {
                    //are all properties the same? => test for modified 
                    if ((duplicateCandidate.Properties == srcFile.Properties) && duplicateCandidate.Item.Properties == srcFile.Item.Properties)
                    {
                        //is just the modified date different? => take the newer one
                        DateTime modifiedDest = new DateTime();
                        DateTime modifiedSrc = new DateTime();

                        DateTime.TryParse(duplicateCandidate.Item["Modified"].ToString(), out modifiedDest);
                        DateTime.TryParse(srcFile.Item["Modified"].ToString(), out modifiedSrc);

                        if (modifiedSrc != null && modifiedDest != null)
                        {
                            if (DateTime.Compare(modifiedDest, modifiedSrc) < 0)
                            { //modified dest is earlier than modified src => src is the newer one
                                duplicatedFilesToRemove.Add(duplicateCandidate);
                                duplicatedFilesToCopy.Add(srcFile);
                                duplicate = duplicateCandidate;
                            }
                            else if (DateTime.Compare(modifiedDest, modifiedSrc) > 0)//modifiedDest is later than modifiedSrc => dest is the newer one, no need to copy srcFile
                            {
                                duplicate = srcFile;
                            }
                        }
                    }
                }

                if (duplicate == null)
                {
                    remainingFiles.Add(srcFile);
                }
            }

            web.AllowUnsafeUpdates = true;

            //delete duplicates from destination
            duplicatedFilesToRemove.ForEach(duplicateFile => destLibrary.Items.DeleteItemById(duplicateFile.Item.ID));

            //copy duplicated files to destination 
            duplicatedFilesToCopy.ForEach(file =>
            {
                Hashtable properties = file.Properties;
                SPFile result = destFolders[0].Folder.Files.Add(file.ServerRelativeUrl + "/" + file.Name, file.OpenBinary(), properties, true);
            });

            //copy all Other files (those who are not in duplicatedFilesToCopy
            CopyLeftFiles(web, destFolders, remainingFiles);

            //delete sourcefolder
            sourceLibrary.Items.DeleteItemById(itemId);

        }
        else //means to keep both files, create an ending and merge missing files into
        {
            //get all files from destination folder and from sourcefolder
            List<SPFile> duplicatedFilesToRenameDest = new List<SPFile>();
            List<SPFile> filesLeft = new List<SPFile>();

            //look for files already in destination
            sourceFiles.ForEach(srcFile =>
            {
                SPFile duplicateToRename = destinationFiles.Find(destFile => destFile.Name == srcFile.Name && destFile.Properties == srcFile.Properties && destFile.Item.Properties == srcFile.Item.Properties);
                if (duplicateToRename != null)
                {
                    duplicatedFilesToRenameDest.Add(duplicateToRename);
                }
                else
                {
                    filesLeft.Add(srcFile);
                }
            });

            //rename duplicates from destination
            duplicatedFilesToRenameDest.ForEach(duplicateFile =>
            {
                duplicateFile.CheckOut();
                duplicateFile.Item["Name"] = duplicateFile.Item.Name + "_old";
                duplicateFile.Item.Update();
                duplicateFile.CheckIn("renamed by move to other library");
            });

            web.AllowUnsafeUpdates = true;

            //copy all Other files (those who are not in duplicatedFilesToRenameSrc
            CopyLeftFiles(web, destFolders, filesLeft);

            //delete source folder
            sourceLibrary.Items.DeleteItemById(itemId);
        }


    }
⚠️ **GitHub.com Fallback** ⚠️