private bool CreateVhd() { using (var stream = new FileStream(this.FileName, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None, 1, FileOptions.WriteThrough)) { ReFS.RemoveIntegrityStream(stream.SafeFileHandle); var footer = new HardDiskFooter(); footer.BeginUpdate(); footer.CreatorApplication = VhdCreatorApplication.JosipMedvedVhdAttach; footer.CreatorVersion = Medo.Reflection.EntryAssembly.Version; footer.SetSize((UInt64)this.SizeInBytes); footer.OriginalSize = footer.CurrentSize; footer.DiskType = VhdDiskType.FixedHardDisk; footer.EndUpdate(); var lastReport = DateTime.UtcNow; byte[] buffer = new byte[Settings.WriteBufferSize]; ulong remaining = footer.CurrentSize; while (remaining > 0) { if (bgw.CancellationPending) { stream.Dispose(); File.Delete(this.FileName); return(false); } ulong count = (ulong)buffer.Length; if ((ulong)count > remaining) { count = remaining; } stream.Write(buffer, 0, (int)count); remaining -= count; if (lastReport.AddSeconds(1) < DateTime.UtcNow) { bgw.ReportProgress(100 - (int)(remaining * 100 / footer.CurrentSize)); lastReport = DateTime.UtcNow; } } buffer = footer.Bytes; stream.Write(buffer, 0, buffer.Length); } return(true); }
private void bwAction_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { ReFS.RemoveIntegrityStream(this.File); }