/// <summary> /// Method to extract an embedded file /// </summary> /// <param name="format">Format of the embedded file</param> public void Extract(EmbeddedFormat format) { try { MemoryStream ms = GetFileStream(); ArchiveFile ex = new ArchiveFile(ms, SevenZipFormat.Zip); embeddedFiles = GetEntries(format, ref ex); currentModel.NumberOfFiles = embeddedFiles.Count; for (int i = 0; i < currentModel.NumberOfFiles; i++) { if (embeddedFiles[i].IsImage) { embeddedFiles[i].CreateImage(true); } else if (embeddedFiles[i].IsXml) { embeddedFiles[i].CreateXml(); } else if (embeddedFiles[i].IsText) { embeddedFiles[i].CreateText(); } currentModel.CurrentFile = i + 1; } } catch (Exception e) { hasErrors = true; lastError = e.Message; } }
/// <summary> /// Method to get all embedded files as list according to the target image / file (format) type /// </summary> /// <param name="format">Target format</param> /// <param name="archive">Reference to the opened file (handled as archive)</param> /// <returns>A list of items</returns> private List <ExtractorItem> GetEntries(EmbeddedFormat format, ref ArchiveFile archive) { string extension = ""; bool allFiles = false; switch (format) { case EmbeddedFormat.Emf: extension = ".emf"; break; case EmbeddedFormat.Wmf: extension = ".wmf"; break; case EmbeddedFormat.Png: extension = ".png"; break; case EmbeddedFormat.Jpg: extension = ".jpg"; break; case EmbeddedFormat.All: allFiles = true; break; } List <ExtractorItem> list = new List <ExtractorItem>(); MemoryStream ms; string[] split; char[] delimiter = new char[] { '\\', '/' }; string file, path; ExtractorItem item; for (int i = 0; i < archive.Entries.Count; i++) { if ((archive.Entries[i].IsFolder == false && archive.Entries[i].FileName.ToLower().EndsWith(extension)) || allFiles == true) { ms = new MemoryStream(); archive.Entries[i].Extract(ms); ms.Flush(); ms.Position = 0; split = archive.Entries[i].FileName.Split(delimiter); file = split[split.Length - 1]; path = archive.Entries[i].FileName.Substring(0, archive.Entries[i].FileName.Length - file.Length); item = new ExtractorItem(file, ms, false, path); item.Crc32 = archive.Entries[i].CRC; item.FileSize = (long)archive.Entries[i].Size; item.LastChange = archive.Entries[i].LastWriteTime; list.Add(item); } } return(list); }