public static async Task Create(string loc, HDFileType fileType, long size, CancellationToken cancellationToken, IProgress <Tuple <int, string> > progress, DeviceType type = DeviceType.DeviceType_HardDisk, bool dynamic = true, bool splitFile = false) { var vdi = Client.VBox.CreateMedium(fileType.ToString(), loc, AccessMode.AccessMode_ReadWrite, type); var variants = new MediumVariant[32]; var i = 0; if (!dynamic) { variants[i++] = MediumVariant.MediumVariant_Fixed; } if (splitFile && fileType == HDFileType.VMDK) { variants[i] = MediumVariant.MediumVariant_VmdkSplit2G; } await Client.ProcessProgress(vdi.CreateBaseStorage(size, variants), cancellationToken, progress); }
public static async Task CloneAsync(string src, string dest, HDFileType ft, bool dyn, bool split, CancellationToken cancellationToken, IProgress <Tuple <int, string> > progress) { if (string.IsNullOrEmpty(Path.GetDirectoryName(dest))) { dest = Path.Combine(Path.GetDirectoryName(src), Path.GetFileName(dest)); } var vdi = OpenMedium(src, AccessMode.AccessMode_ReadOnly); var newVdi = Client.VBox.CreateMedium(ft.ToString(), dest, AccessMode.AccessMode_ReadWrite, DeviceType.DeviceType_HardDisk); var variants = new MediumVariant[32]; var i = 0; if (!dyn) { variants[i++] = MediumVariant.MediumVariant_Fixed; } if (split && ft == HDFileType.VMDK) { variants[i] = MediumVariant.MediumVariant_VmdkSplit2G; } await Client.ProcessProgress(vdi.CloneToBase(newVdi, variants), cancellationToken, progress); }