private void CheckAllDirectoryContents(DirectoryEntry dir) { IEnumerator <Entry> it = dir.Entries; //foreach (Entry entry in dir) while (it.MoveNext()) { Entry entry = it.Current; if (entry is DirectoryEntry) { CheckAllDirectoryContents((DirectoryEntry)entry); } else { DocumentNode doc = (DocumentNode)entry; DocumentInputStream dis = new DocumentInputStream(doc); try { int numBytes = dis.Available(); byte[] data = new byte[numBytes]; dis.Read(data); } finally { dis.Close(); } } } }
public EncryptionInfo(DirectoryNode dir) { DocumentInputStream dis = dir.CreateDocumentInputStream("EncryptionInfo"); versionMajor = dis.ReadShort(); versionMinor = dis.ReadShort(); encryptionFlags = dis.ReadInt(); if (versionMajor == 4 && versionMinor == 4 && encryptionFlags == 0x40) { StringBuilder builder = new StringBuilder(); byte[] xmlDescriptor = new byte[dis.Available()]; dis.Read(xmlDescriptor); foreach (byte b in xmlDescriptor) builder.Append((char)b); string descriptor = builder.ToString(); header = new EncryptionHeader(descriptor); verifier = new EncryptionVerifier(descriptor); } else { int hSize = dis.ReadInt(); header = new EncryptionHeader(dis); if (header.Algorithm == EncryptionHeader.ALGORITHM_RC4) { verifier = new EncryptionVerifier(dis, 20); } else { verifier = new EncryptionVerifier(dis, 32); } } }
static void Main(string[] args) { FileStream stream = new FileStream("thumbs.db", FileMode.Open, FileAccess.Read); POIFSFileSystem poifs = new POIFSFileSystem(stream); var entries = poifs.Root.Entries; //POIFSDocumentReader catalogdr = poifs.CreatePOIFSDocumentReader("Catalog"); //byte[] b1=new byte[catalogdr.Length-4]; //catalogdr.Read(b1,4,b1.Length); //Dictionary<string, string> indexList = new Dictionary<string, string>(); //for (int j = 0; j < b1.Length; j++) //{ // if(b1[0] //} while (entries.MoveNext()) { DocumentNode entry = entries.Current as DocumentNode; DocumentInputStream dr = poifs.CreateDocumentInputStream(entry.Name); if (entry.Name.ToLower() == "catalog") { continue; } byte[] buffer = new byte[dr.Length]; dr.Read(buffer); int startpos = 0; //detect jfif header for (int i = 3; i < buffer.Length; i++) { if (buffer[i - 3] == 0xFF && buffer[i - 2] == 0xD8 && buffer[i - 1] == 0xFF && buffer[i] == 0xE0) { startpos = i - 3; break; } } if (startpos == 0) { continue; } FileStream jpeg = File.Create(entry.Name + ".jpeg"); jpeg.Write(buffer, startpos, buffer.Length - startpos); jpeg.Close(); } stream.Close(); }
/* ********** START implementation of POIFSReaderListener ********** */ /** * Process a POIFSReaderEvent that this listener had registered * for * * @param evt the POIFSReaderEvent */ public void ProcessPOIFSReaderEvent(POIFSReaderEvent evt) { DocumentInputStream istream = evt.Stream; POIFSDocumentPath path = evt.Path; String name = evt.Name; try { int size = (int)(istream.Length - istream.Position); byte[] data = new byte[size]; istream.Read(data); DocumentDescriptor descriptor = new DocumentDescriptor(path, name); Console.WriteLine("Adding document: " + descriptor + " (" + size + " bytes)"); dataMap[descriptor] = data; int pathLength = path.Length; DirectoryEntry entry = root; for (int k = 0; k < path.Length; k++) { String componentName = path.GetComponent(k); Entry nextEntry = null; try { nextEntry = entry.GetEntry(componentName); } catch (FileNotFoundException ignored) { try { nextEntry = entry.CreateDirectory(componentName); } catch (IOException e) { Console.WriteLine("Unable to Create directory"); //e.printStackTrace(); throw; } } entry = (DirectoryEntry)nextEntry; } entry.CreateDocument(name, size, this); } catch (IOException ignored) { } }