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}"); } }
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}"); } } } } }