public override void Backup(object objPstFileToSave) { PSTRegistryEntry pstFileToSave = (PSTRegistryEntry)objPstFileToSave; BackupResultInfo backupResult = new BackupResultInfo(pstFileToSave); backupResult.IsCompressed = AppSettings.FilesAndFoldersCompressFiles; try { Logger.Write(30015, "Starting to backup " + pstFileToSave.SourcePath + " to file system with full method\r\n", Logger.MessageSeverity.Debug); // Backup to SMB destination backupResult = backupResult.IsCompressed ? BackupWithCompression(pstFileToSave, backupResult) : BackupWithoutCompression(pstFileToSave, backupResult); backupResult.ErrorCode = BackupResultInfo.BackupResult.Success; backupResult.ErrorMessage = String.Empty; pstFileToSave.LastSuccessfulBackup = DateTime.UtcNow; } catch (BackupCanceledException ex) { Logger.Write(24, "Backup of " + ex.PstFilename + " have been canceled by the user", Logger.MessageSeverity.Warning); } catch (NotEnoughEstimatedDiskSpace ex) { Logger.Write(10002, "Not enough estimated disk space on " + ex.Destination, Logger.MessageSeverity.Warning, System.Diagnostics.EventLogEntryType.Warning); backupResult.ErrorCode = BackupResultInfo.BackupResult.Failed; backupResult.ErrorMessage = "Not enough estimated disk space on " + ex.Destination; } catch (Exception ex) { Logger.Write(20025, "An error occurs while saving a PST file with full method\r\n" + ex.Message, Logger.MessageSeverity.Error, System.Diagnostics.EventLogEntryType.Error); backupResult.ErrorCode = BackupResultInfo.BackupResult.Failed; backupResult.ErrorMessage = ex.Message; } if (!base.IsCancelRequired) { backupResult.EndTime = DateTime.UtcNow; pstFileToSave.Save(); BackupFinished(new BackupFinishedEventArgs(pstFileToSave, backupResult)); } }
public override void Backup(object objPstFileToSave) { try { PSTRegistryEntry pstFileToSave = (PSTRegistryEntry)objPstFileToSave; BackupResultInfo backupResult = new BackupResultInfo(pstFileToSave); backupResult.IsCompressed = false; Logger.Write(30011, "Starting to backup " + pstFileToSave.SourcePath + " to file system with differential method", Logger.MessageSeverity.Debug); int fileId = CheckPrerequisitesForSmbBackup(pstFileToSave.SourcePath); string backupFile = _clientDb.GetBackupFilePath(pstFileToSave.SourcePath); List <string> remoteChunks = _clientDb.GetHashes(fileId); backupResult.ChunkCount = SynchonizeLocalAndRemoteFile(fileId, pstFileToSave.SourcePath, backupFile, remoteChunks); string backupFileNewName = FileSystem.GetNewName(backupFile); FileSystem.RenameFile(backupFile, backupFileNewName); _clientDb.RenameBackupFile(pstFileToSave.SourcePath, backupFileNewName); pstFileToSave.LastSuccessfulBackup = DateTime.Now; pstFileToSave.Save(); backupResult.RemotePath = backupFileNewName; backupResult.CompressedSize = 0; backupResult.ErrorCode = BackupResultInfo.BackupResult.Success; backupResult.ErrorMessage = String.Empty; backupResult.EndTime = DateTime.UtcNow; Logger.Write(30012, pstFileToSave + " have been successfuly saved", Logger.MessageSeverity.Debug); if (!base.IsCancelRequired) { BackupFinished(new BackupFinishedEventArgs(pstFileToSave, backupResult)); } } catch (Exception ex) { Logger.Write(20024, "An error occurs while backuping a PST file with differential method\r\n" + ex.Message, Logger.MessageSeverity.Error, System.Diagnostics.EventLogEntryType.Error); } }
/// <summary> /// Create an instance of the event args /// </summary> /// <param name="pstRegistryEntry">A reference to the PstRegistryEntry</param> /// <param name="backupResult">A reference to the Result of the backup</param> public BackupFinishedEventArgs(PSTRegistryEntry pstRegistryEntry, BackupResultInfo backupResult) { PstRegistryEntry = pstRegistryEntry; Result = backupResult; }
private BackupResultInfo BackupWithoutCompression(PSTRegistryEntry pstFileToSave, BackupResultInfo backupResult) { FileInfo sourceFile = new FileInfo(pstFileToSave.SourcePath); string finalDestinationFolder = FileSystem.ExpandDestinationFolder(AppSettings.FilesAndFoldersDestinationPath); CopyFile(sourceFile.FullName, Path.Combine(finalDestinationFolder, sourceFile.Name + ".temp"), false); FileSystem.RenameFile(Path.Combine(finalDestinationFolder, sourceFile.Name + ".temp"), Path.Combine(finalDestinationFolder, sourceFile.Name)); backupResult.RemotePath = Path.Combine(finalDestinationFolder, sourceFile.Name); backupResult.CompressedSize = backupResult.FileSize; return(backupResult); }
private BackupResultInfo BackupWithCompression(PSTRegistryEntry pstFileToSave, BackupResultInfo backupResult) { FileInfo sourceFile = new FileInfo(pstFileToSave.SourcePath); string finalDestinationFolder = FileSystem.ExpandDestinationFolder(AppSettings.FilesAndFoldersDestinationPath); DirectoryInfo compressionFolder = new DirectoryInfo(FileSystem.GetTemporaryFolder()); if (HasEnoughDiskspace(compressionFolder, sourceFile.Length / 2)) { string destinationFilePath = Path.Combine(compressionFolder.FullName, sourceFile.Name + ".gz.temp"); CompressFile(sourceFile.FullName, destinationFilePath); CopyFile(destinationFilePath, Path.Combine(finalDestinationFolder, sourceFile.Name + ".gz.temp"), true); FileInfo compressedFile = new FileInfo(Path.Combine(finalDestinationFolder, sourceFile.Name + ".gz")); FileSystem.RenameFile(Path.Combine(finalDestinationFolder, sourceFile.Name + ".gz.temp"), compressedFile.FullName); backupResult.RemotePath = compressedFile.FullName; backupResult.CompressedSize = compressedFile.Length; try { compressionFolder.Delete(true); } catch (Exception) { } } else { throw new NotEnoughEstimatedDiskSpace(compressionFolder.FullName); } return(backupResult); }