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);
            }
        }
Example #2
0
 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);
         }
     }
 }
Example #3
0
        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);
        }