コード例 #1
0
 public async Task Run(IBackupLocationFactoryResolver locationFactoryResolver)
 {
     foreach (VirtualDisk vd in VirtualMachine.VirtualDisks)
     {
         await BackupVirtualDisk(vd, locationFactoryResolver);
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
0
 public FullBackupService(IBackupLocationFactoryResolver locationFactoryResolver)
 {
     this.locationFactoryResolver = locationFactoryResolver;
 }
コード例 #4
0
 public IncrementalBackupService(IBackupLocationFactoryResolver locationFactoryResolver)
 {
     this.locationFactoryResolver = locationFactoryResolver;
 }