public FolderEntry IndexDirectory(string source) { FolderEntry folder = null; if (!Directory.Exists(source)) { Directory.CreateDirectory(source); } DirectoryInfo dir = new DirectoryInfo(source); folder = new FolderEntry(dir.Name); folder.Path = dir.FullName; foreach (var file in dir.GetFiles()) { FileEntry fileEntry = new FileEntry(file.Name, file.Length, file.CreationTime, file.LastWriteTime); folder.AddFile(fileEntry); } foreach (var directory in dir.GetDirectories()) { FolderEntry subFolder = IndexDirectory(directory.FullName); if (subFolder != null) { folder.AddFolder(subFolder); } } return folder; }
private List<BackupJobDetail> readSyncFolders(int JobId, FolderEntry source, FolderEntry destination) { List<BackupJobDetail> jobDetails = new List<BackupJobDetail>(); foreach (var item in source.Folders) { if (!destination.Folders.ContainsKey(item.Key)) { FolderEntry newFolder = new FolderEntry(item.Key); destination.AddFolder(newFolder); Directory.CreateDirectory(destination.Folders[item.Key].Path); } jobDetails.AddRange(readSyncFolders(JobId,item.Value, destination.Folders[item.Key])); } foreach (var item in source.Files.Keys) { bool copy = false; // compare files that exist if (destination.Files.ContainsKey(item)) { // compare file size copy = (destination.Files[item].FileSize != source.Files[item].FileSize) || (destination.Files[item].DateModified != source.Files[item].DateModified); } else { // file does not exist. copy = true; } if (copy) { BackupJobDetail jobDetail = new BackupJobDetail() { BackupJobId = JobId, FileNameFrom = Path.Combine(source.Path, item), FileNameTo = Path.Combine(destination.Path, item), FileSize = source.Files[item].FileSize, DateSynced = DateTime.Now }; jobDetails.Add(jobDetail); } } return jobDetails; }