public async Task Run(IBackupLocationFactoryResolver locationFactoryResolver) { foreach (VirtualDisk vd in VirtualMachine.VirtualDisks) { await BackupVirtualDisk(vd, locationFactoryResolver); } }
private async Task BackupVirtualDisk(VirtualDisk vd, IBackupLocationFactoryResolver locationFactoryResolver) { IBackupLocationFactory targetFactory = locationFactoryResolver.Resolve(LocationType); IBackupLocationFactory sourceFactory = locationFactoryResolver.Resolve(VirtualMachine.SourceLocationType); string backupLocation = $"{Path}/{vd.FileName}"; Stream targetStream = targetFactory.Open(backupLocation); Stream sourceStream = sourceFactory.Open(vd); byte[] buffer = new byte[512]; while (sourceStream.Position < sourceStream.Length) { long remainingBytes = sourceStream.Length - sourceStream.Position; if (remainingBytes < buffer.Length) { buffer = new byte[remainingBytes]; } await sourceStream.ReadAsync(buffer); await targetStream.WriteAsync(buffer); } targetStream.Close(); sourceStream.Close(); _virtualDiskBackupLocations.Add(vd.FileName, backupLocation); }
public FullBackupService(IBackupLocationFactoryResolver locationFactoryResolver) { this.locationFactoryResolver = locationFactoryResolver; }
public IncrementalBackupService(IBackupLocationFactoryResolver locationFactoryResolver) { this.locationFactoryResolver = locationFactoryResolver; }