Пример #1
0
        /// <summary>
        /// Will process the report generated by the Compare methods by adding, removing and updating files to the <paramref name="destStore"/> file store.
        /// </summary>
        /// <param name="report">The report, generated by one of the Compare methods, to process.</param>
        /// <param name="sourcePath">The source directory to process.</param>
        /// <param name="destStore">The file store to process.</param>
        /// <param name="feedback">Provides a means to gather feedback from the mirroring process.</param>
        public static void MirrorSourceToDestination(
            IEnumerable <ICompareResult> report,
            string sourcePath,
            IFileStore destStore,
            Action <ICompareResult, double> feedback)
        {
            // **** initialize
            var total = (from x in report
                         where x.ItemType == CompareType.File &&
                         (x.Action == CompareAction.New || x.Action == CompareAction.Update || x.Action == CompareAction.Remove)
                         select x).Count();
            var count = 0;
            // **** save the original 'original filenames'
            var originalFilenames = ((IFileStoreAdvanced)destStore).GetOriginalFilenames();

            // **** delete REMOVE files from MIRROR
            foreach (var item in from x in report
                     where x.ItemType == CompareType.File && x.Action == CompareAction.Remove
                     select x)
            {
                if (feedback != null)
                {
                    feedback(item, (double)((double)count / (double)total));
                    ++count;
                }
                if (destStore.Contains(item.DestinationRootFilename))
                {
                    destStore.Delete(item.DestinationRootFilename);
                }
            }
            // **** add NEW and UPDATE files to SOURCE
            foreach (var item in from x in report
                     where x.ItemType == CompareType.File &&
                     (x.Action == CompareAction.New || x.Action == CompareAction.Update)
                     select x)
            {
                if (feedback != null)
                {
                    feedback(item, (double)((double)count / (double)total));
                    ++count;
                }
                destStore.Add(item.SourceRootFilename, item.SourceFullPath, item.SourceLastModifiedTimeUtc, item.SourceFileSizeInBytes);
            }
            // **** save store (finalize mirror process)
            feedback?.Invoke(null, 1);
            destStore.Save(false);
            // **** clear/restore the 'original filenames'
            ((IFileStoreAdvanced)destStore).ClearOriginalFilenames();
            ((IFileStoreAdvanced)destStore).SetOriginalFilenames(originalFilenames);
        }
Пример #2
0
        public async Task <IActionResult> SourceFileLoad(SourceFileStub SourceFileStub)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    SourceFile model  = new SourceFile();
                    FileStore  fmodel = new FileStore();

                    model.SourceType = SourceFileStub.SourceType;

                    using (var memoryStream = new MemoryStream())
                    {
                        await SourceFileStub.File.CopyToAsync(memoryStream);

                        fmodel.File    = memoryStream.ToArray();
                        model.Length   = SourceFileStub.File.Length;
                        model.FileName = SourceFileStub.File.FileName;
                    }

                    _sourceFile.Add(model);
                    _sourceFile.Save();
                    fmodel.id = model.id;
                    _fileStore.Add(fmodel);
                    _fileStore.Save();

                    TempData["Error"] = "This file is Added FileSores";
                }
                catch (Exception ex)
                {
                    TempData["Error"] = ex.Message.ToString();
                }
            }



            return(RedirectToAction("SourceFileLoad"));
        }
Пример #3
0
        /// <summary>
        /// Will process the report generated by the Compare methods by adding, removing and updating files to the <paramref name="destStore"/> file store.
        /// </summary>
        /// <param name="report">The report, generated by one of the Compare methods, to process.</param>
        /// <param name="sourceStore">The file store to process.</param>
        /// <param name="destStore">The file store to process.</param>
        /// <param name="feedback">Provides a means to gather feedback from the mirroring process.</param>
        public static void MirrorSourceToDestination(
            IEnumerable <ICompareResult> report,
            IFileStore sourceStore,
            IFileStore destStore,
            Action <ICompareResult, double> feedback)
        {
            // **** initialize
            var total = (from x in report
                         where x.ItemType == CompareType.File &&
                         (x.Action == CompareAction.New || x.Action == CompareAction.Update || x.Action == CompareAction.Remove)
                         select x).Count();
            var count = 0;
            // create temporary extraction folder
            var tempPath = CreateTemporaryDirectory();
            // temporarily change source extraction path
            var originalExtractionPath = sourceStore.ExtractionRootDirectory;

            sourceStore.ExtractionRootDirectory = tempPath;
            // save the original 'original filenames'
            var originalFilenames = ((IFileStoreAdvanced)destStore).GetOriginalFilenames();
            // **** extract NEW and UPDATE files from SOURCE to temporary extraction folder
            var list = new List <IFileStoreItem>();

            foreach (var item in from x in report
                     where x.ItemType == CompareType.File &&
                     (x.Action == CompareAction.New || x.Action == CompareAction.Update)
                     select x)
            {
                if (feedback != null)
                {
                    feedback(item, (double)((double)count / (double)total));
                    ++count;
                }
                if (sourceStore.Contains(item.SourceRootFilename))
                {
                    list.Add(sourceStore.Get(item.SourceRootFilename));
                }
            }
            sourceStore.Extract(list, true);
            // **** delete REMOVE files from MIRROR
            foreach (var item in from x in report
                     where x.ItemType == CompareType.File &&
                     x.Action == CompareAction.Remove
                     select x)
            {
                if (feedback != null)
                {
                    feedback(item, (double)((double)count / (double)total));
                    ++count;
                }
                if (destStore.Contains(item.DestinationRootFilename))
                {
                    destStore.Delete(item.DestinationRootFilename);
                }
            }
            // **** add/update NEW and UPDATE files, from temporary extraction folder, into MIRROR
            foreach (var item in list)
            {
                destStore.Add(item.RootFilename, item.ExtractedFilename, item.RootFileLastModifiedTimeUtc, item.FileSize);
            }
            // **** save store (finalize mirror process)
            destStore.Save(false);
            // **** clear/restore the 'original filenames'
            ((IFileStoreAdvanced)destStore).ClearOriginalFilenames();
            ((IFileStoreAdvanced)destStore).SetOriginalFilenames(originalFilenames);
            // **** restore original source extraction path
            sourceStore.ExtractionRootDirectory = originalExtractionPath;
            // **** delete temporary extraction folder
            DeleteDirectory(tempPath);
        }