public bool extract(string archiveName, uint fileNumber, string arcType, ProgressBar progress, Label status) { Program.form.waitForFreeMemory(status); attachedProgressBar = progress; attachedStatus = status; status.Text = "Extracting File " + this.extracting_file; progress.Maximum = 1; progress.Value = 0; Application.DoEvents(); bool flag = false; KnownSevenZipFormat format = this.stringToSevenZipFormat(arcType); switch (format) { case KnownSevenZipFormat.SevenZip: case KnownSevenZipFormat.Zip: break; case KnownSevenZipFormat.Rar: return(this.extractRar(archiveName, progress, status, true)); default: showError("1.0"); break; } using (SevenZipFormat format2 = new SevenZipFormat(SevenZipDllPath)) { if (this.ArchiveIn != null) { Marshal.ReleaseComObject(this.ArchiveIn); for (int i = 0; i < 5; i++) { Application.DoEvents(); } } this.ArchiveIn = format2.CreateInArchive(SevenZipFormat.GetClassIdFromKnownFormat(format)); if (this.ArchiveIn == null) { showError("1.1"); flag = false; } try { using (InStreamWrapper wrapper = new InStreamWrapper(System.IO.File.OpenRead(archiveName))) { IArchiveOpenCallback openArchiveCallback = new ArchiveOpenCallback(); if (this.ArchiveIn.Open(wrapper, 0x20000L, openArchiveCallback) != 0) { showError("1.2"); flag = false; } else { PropVariant variant = new PropVariant(); this.ArchiveIn.GetProperty(fileNumber, ItemPropId.kpidPath, ref variant); string fileName = (string)variant.GetObject(); this.ArchiveIn.Extract(new uint[] { fileNumber }, 1, 0, new ArchiveExtractCallback(fileNumber, fileName)); flag = true; } } } finally { Marshal.ReleaseComObject(this.ArchiveIn); } } Program.form.waitForFreeMemory(status); return(flag); }
public int findFirstExtInArchive(string ext, string archiveName, string arcType, ProgressBar progress, Label status) { status.Text = "Scanning Archive " + archiveName; progress.Maximum = 4; progress.Value = 0; Application.DoEvents(); int num = -1; using (SevenZipFormat format = new SevenZipFormat(SevenZipDllPath)) { KnownSevenZipFormat sevenZip = KnownSevenZipFormat.SevenZip; arcType = arcType.ToLower(); switch (arcType) { case "rar": sevenZip = KnownSevenZipFormat.Rar; break; case "zip": sevenZip = KnownSevenZipFormat.Zip; break; case "7z": sevenZip = KnownSevenZipFormat.SevenZip; break; default: showError("0.1"); break; } IInArchive o = format.CreateInArchive(SevenZipFormat.GetClassIdFromKnownFormat(sevenZip)); if (o == null) { showError("0.2"); num = -1; } try { using (InStreamWrapper wrapper = new InStreamWrapper(System.IO.File.OpenRead(archiveName))) { IArchiveOpenCallback openArchiveCallback = new ArchiveOpenCallback(); if (o.Open(wrapper, 0x40000L, openArchiveCallback) != 0) { showError("0.3"); num = -1; } uint numberOfItems = o.GetNumberOfItems(); fileInRar = ""; for (int i = 0; i < numberOfItems; i++) { PropVariant variant = new PropVariant(); o.GetProperty((uint)i, ItemPropId.kpidPath, ref variant); PropVariant variant2 = new PropVariant(); o.GetProperty((uint)i, ItemPropId.kpidCRC, ref variant2); if (Program.form.getFileExtension(variant.GetObject().ToString()).ToLower() == ext.ToLower()) { num = i; fileInRar = variant.GetObject().ToString(); this.crc_of_extracting_file = long.Parse(variant2.GetObject().ToString()).ToString("X8"); return(num); } } return(num); } } finally { Marshal.ReleaseComObject(o); } } return(num); }