public FormCortando(Stream archivoOriginal, FileInfo infoOriginal, long cutterSize) { InitializeComponent(); bytesAnteriores = 0; archivoXCI = new XCIFile(archivoOriginal, infoOriginal, cutterSize); this.Text = "Cortando " + archivoXCI.soloNombre; pbArchivos.Maximum = archivoXCI.partesACortar; lblArchivos.Text = string.Format("{0} partes de {1}", pbArchivos.Value, archivoXCI.partesACortar); lblArchivos.Location = new System.Drawing.Point(this.Width - 20 - lblArchivos.Width, lblArchivos.Location.Y); lblBytesLeidos.Text = string.Format("{0}/{1} GB", 0, (Convert.ToDecimal(cutterSize) / 1024 / 1024 / 1024).ToString("0.00")); lblBytesLeidos.Location = new System.Drawing.Point(this.Width - 20 - lblBytesLeidos.Width, lblBytesLeidos.Location.Y); }
private static void writePartCutter(XCIFile archivoXCI, Stream srDestino) { byte[] buffer = new byte[128]; int leidos = 0; for (archivoXCI.bytesLeidos = 0; archivoXCI.bytesLeidos < archivoXCI.cutterActual && !archivoXCI.cancelar; archivoXCI.bytesLeidos += leidos) { leidos = archivoXCI.LeerBytes(ref buffer); if (leidos < 128) { Array.Resize <byte>(ref buffer, leidos); } srDestino.Write(buffer, 0, buffer.Length); archivoXCI.totalBytes += leidos; } srDestino.Close(); }
public static void cutterParts(XCIFile archivoXCI, BackgroundWorker bwCutter) { Stream srDestino; for (int indice = 0; indice < archivoXCI.partesACortar && !archivoXCI.cancelar; indice++) { if (archivoXCI.cutterActual > 0) { srDestino = new FileStream(archivoXCI.nombreConRuta.Replace(".xci", "-cut.xc") + indice, FileMode.CreateNew, FileAccess.Write, FileShare.Write); writePartCutter(archivoXCI, srDestino); if (archivoXCI.tamanioArchivo - archivoXCI.totalBytes < archivoXCI.cutterActual) { archivoXCI.cutterActual = archivoXCI.tamanioArchivo - archivoXCI.totalBytes; } } bwCutter.ReportProgress(indice + 1); } archivoXCI.Close(); }