예제 #1
0
        public void Wildcard2Filter()
        {
            FileSelectionList list = new FileSelectionList();

            list.Add(testPath);
            FileFilter filter = new FileFilter();

            filter.Add(@".*\.b");
            filter.Add(@".*\.c");
            BackupParameters param = new BackupParameters()
            {
                type = EBackupType.Full
            };

            FileList files = new Backup().GetFiles(list, filter, param);

            List <String> expected = new List <string>()
            {
                testPath + @"\file1.a",
                testPath + @"\dir1\file4.a",
                testPath + @"\dir2\file6.a",
            };

            CompareFileLists(files, expected);
        }
예제 #2
0
 private void AppendFile(ref FileList list, FileFilter filter, BackupParameters param, FileInfo f)
 {
     if ((param.type == EBackupType.Incremental && f.LastWriteTime > param.lastBackup) || param.type == EBackupType.Full)
     {
         if (!filter.Match(f.FullName))
         {
             list.Add(f);
         }
     }
 }
예제 #3
0
        public void GetAllFilesZip()
        {
            FileSelectionList list = new FileSelectionList();

            list.Add(testPath);
            FileFilter       filter = new FileFilter();
            BackupParameters param  = new BackupParameters()
            {
                type = EBackupType.Full, outputDirectory = outputPath, backupName = "GetAllFilesZip", backupTime = new DateTime(2020, 1, 1, 13, 0, 0)
            };

            FileList files = new Backup().GetFiles(list, filter, param);

            new Backup().DoBackup(files, param);
        }
예제 #4
0
 private void AppendDirectory(ref FileList list, FileFilter filter, BackupParameters param, DirectoryInfo di)
 {
     try
     {
         FileInfo[] files = di.GetFiles();
         foreach (var f in files)
         {
             AppendFile(ref list, filter, param, f);
         }
         DirectoryInfo[] dirs = di.GetDirectories();
         foreach (var d in dirs)
         {
             AppendDirectory(ref list, filter, param, d);
         }
     }
     catch (Exception ex)
     {
         BackupErrorMessage?.Invoke($"Failed to backup directory '{di.FullName}' - {ex.Message}");
     }
 }
예제 #5
0
        public void DuplicateFiles()
        {
            FileSelectionList list = new FileSelectionList();

            list.Add(testPath + @"\file3.c");
            list.Add(testPath + @"\file3.c");
            FileFilter       filter = new FileFilter();
            BackupParameters param  = new BackupParameters()
            {
                type = EBackupType.Full
            };

            FileList files = new Backup().GetFiles(list, filter, param);

            List <String> expected = new List <string>()
            {
                testPath + @"\file3.c",
            };

            CompareFileLists(files, expected);
        }
예제 #6
0
        public void GetAllFiles()
        {
            FileSelectionList list = new FileSelectionList();

            list.Add(testPath);
            FileFilter       filter = new FileFilter();
            BackupParameters param  = new BackupParameters()
            {
                type = EBackupType.Full
            };

            FileList files = new Backup().GetFiles(list, filter, param);

            List <String> expected = new List <string>();

            foreach (var f in testFiles)
            {
                expected.Add(f.filename);
            }

            CompareFileLists(files, expected);
        }
예제 #7
0
        public FileList GetFiles(FileSelectionList list, FileFilter filter, BackupParameters param)
        {
            FileList files = new FileList();

            foreach (var path in list)
            {
                FileInfo f = new FileInfo(path);
                if (f.Exists)
                {
                    AppendFile(ref files, filter, param, f);
                }
                else
                {
                    DirectoryInfo d = new DirectoryInfo(path);
                    if (d.Exists)
                    {
                        AppendDirectory(ref files, filter, param, d);
                    }
                }
            }
            return(files);
        }
예제 #8
0
        public void DoBackup(FileList files, BackupParameters param)
        {
            string path = MakeBackupFilename(param);

            //System.Console.WriteLine("|----:----|----:----|----:----|----:----|----:----|");
            //System.Console.WriteLine("01234567890123456789012345678901234567890123456789");

            int    steps    = 50;
            UInt64 count    = 0;
            int    lastTick = -1;

            using (FileStream zipStream = new FileStream(path, FileMode.Create))
            {
                using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Create))
                {
                    foreach (var file in files)
                    {
                        int tick = (int)(count / (files.totalBytes / (ulong)steps));
                        if (tick != lastTick)
                        {
                            BackupUpdate?.Invoke(tick, steps);
                            //System.Console.Write(".");
                            lastTick = tick;
                        }
                        try
                        {
                            FileInfo fileInfo = new FileInfo(file);
                            count += (UInt64)fileInfo.Length;
                            archive.CreateEntryFromFile(file, file);
                        }
                        catch (Exception ex)
                        {
                            BackupErrorMessage?.Invoke($"Failed to backup file '{file}' - {ex.Message}");
                        }
                    }
                }
            }
        }
예제 #9
0
        public void IncrementalFilter()
        {
            FileSelectionList list = new FileSelectionList();

            list.Add(testPath);
            FileFilter filter = new FileFilter();

            filter.Add(@".*\.b");
            filter.Add(@".*\.c");
            BackupParameters param = new BackupParameters()
            {
                type = EBackupType.Incremental, lastBackup = new DateTime(2020, 1, 1, 12, 15, 0)
            };

            FileList files = new Backup().GetFiles(list, filter, param);

            List <String> expected = new List <string>()
            {
                testPath + @"\dir1\file4.a",
            };

            CompareFileLists(files, expected);
        }
예제 #10
0
        public void TestMakeFilename()
        {
            BackupParameters param = new BackupParameters()
            {
                type = EBackupType.Full, outputDirectory = "d:\\outdir", backupName = "TestMakeFilename", backupTime = new DateTime(2020, 1, 1, 13, 0, 0)
            };
            string path = new Backup().MakeBackupFilename(param);

            Assert.AreEqual("d:\\outdir\\TestMakeFilename.Full.2020-01-01T130000.zip", path);

            param = new BackupParameters()
            {
                type = EBackupType.Full, outputDirectory = "d:\\outdir", backupName = "TestMakeFilename", backupTime = new DateTime(2020, 1, 1, 1, 2, 3)
            };
            path = new Backup().MakeBackupFilename(param);
            Assert.AreEqual("d:\\outdir\\TestMakeFilename.Full.2020-01-01T010203.zip", path);

            param = new BackupParameters()
            {
                type = EBackupType.Incremental, outputDirectory = "d:\\outdir", backupName = "TestMakeFilename", backupTime = new DateTime(2020, 1, 1, 1, 2, 3)
            };
            path = new Backup().MakeBackupFilename(param);
            Assert.AreEqual("d:\\outdir\\TestMakeFilename.Inc.2020-01-01T010203.zip", path);
        }
예제 #11
0
        public void GetAllFiles2()
        {
            FileSelectionList list = new FileSelectionList();

            list.Add(testPath + @"\dir2");
            list.Add(testPath + @"\dir1\dir3");
            FileFilter       filter = new FileFilter();
            BackupParameters param  = new BackupParameters()
            {
                type = EBackupType.Full
            };

            FileList files = new Backup().GetFiles(list, filter, param);

            List <String> expected = new List <string>()
            {
                testPath + @"\dir2\file6.a",
                testPath + @"\dir2\file7.b",
                testPath + @"\dir1\dir3\dir4\file8.b",
                testPath + @"\dir1\dir3\dir4\file9.c",
            };

            CompareFileLists(files, expected);
        }
예제 #12
0
        public string MakeBackupFilename(BackupParameters param)
        {
            string filename = param.backupName + (param.type == EBackupType.Full ? ".Full" : ".Inc") + param.backupTime.ToString(".yyyy-MM-ddTHHmmss") + ".zip";

            return(Path.Combine(param.outputDirectory, filename));
        }