private void ReadExtraDataSection(BinaryReader reader) { Item.ExtraDataBlocks = new List <ExtraDataBlock>(); while (reader.BaseStream.Position < reader.BaseStream.Length) { int blocksize = reader.ReadInt32(); if (blocksize < 0x4) // Terminal Block { break; } var signature = (ExtraDataBlockSignature)(reader.ReadInt32()); var block = ExtraDataBlockFactory.GetInstance(signature); Item.ExtraDataBlocks.Add(block); var blockReader = ExtraDataBlockHandlerFactory.GetInstance(block, Item); reader.BaseStream.Seek(-Marshal.SizeOf(blocksize) - Marshal.SizeOf(typeof(int)), SeekOrigin.Current); blockReader.ReadFrom(reader); } }
public void TestHandler() { foreach (ExtraDataBlockSignature signature in Enum.GetValues(typeof(ExtraDataBlockSignature))) { ExtraDataBlock block = null; try { block = ExtraDataBlockFactory.GetInstance(signature); } catch (Exception) { Assert.Fail("Check ExtraDataBlockFactory with '{0}' signature", signature); } try { ExtraDataBlockHandlerFactory.GetInstance(block, null); } catch (Exception) { Assert.Fail("Check ExtraDataBlockHandlerFactory with '{0}' block type", block.GetType().Name); } } }
private static string BlindWrite() { var tmpFile = Path.GetTempFileName(); var slf = new ShellLinkFile(); foreach (var block in from ExtraDataBlockSignature signature in System.Enum.GetValues(typeof(ExtraDataBlockSignature)) where signature != ExtraDataBlockSignature.UnknownDataBlock select ExtraDataBlockFactory.GetInstance(signature)) { slf.ExtraDataBlocks.Add(block); } slf.SaveAs(tmpFile); return(tmpFile); }