private void loadTOCfile(string path) { BitConverter.IsLittleEndian = true; listBox1.Items.Clear(); FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read); memsize = (int)fileStream.Length; memory = new byte[memsize]; int count; int sum = 0; while ((count = fileStream.Read(memory, sum, memsize - sum)) > 0) sum += count; fileStream.Close(); if (memsize > 0) { content = new List<Inventory>(); Inventory temp = new Inventory(); MemoryStream myStream = new MemoryStream(memory); if (myStream.ReadValueU32() == 0x3AB70C13) { myStream.Seek(8, SeekOrigin.Begin); uint jumpSize = myStream.ReadValueU32(); myStream.Seek(jumpSize * 8, SeekOrigin.Current); uint blockSize; do { temp = new Inventory(); long position = myStream.Position; uint value = myStream.ReadValueU32(); blockSize = value & 0xFFFF; uint offset = (uint)myStream.Position; uint fileSize = myStream.ReadValueU32(); myStream.Seek(20, SeekOrigin.Current); string filePath = myStream.ReadStringZ(); myStream.Seek(position + blockSize, SeekOrigin.Begin); temp.name = filePath; temp.offset = offset; temp.size = fileSize; content.Add(temp); } while (blockSize != 0); } myStream.Close(); for (int i = 0; i < content.Count(); i++) { listBox1.Items.Add(content[i].offset.ToString("X") + " : " + content[i].name + " (bytes)" + content[i].size.ToString()); } } }
private void loadTOCfile(string path) { FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read); int memsize = (int)fileStream.Length; memory = new byte[memsize]; int count; int sum = 0; while ((count = fileStream.Read(memory, sum, memsize - sum)) > 0) sum += count; fileStream.Close(); if (memsize > 0) { content = new List<Inventory>(); Inventory temp = new Inventory(); MemoryStream myStream = new MemoryStream(memory); if (myStream.ReadValueU32() == 0x3AB70C13) { myStream.Seek(8, SeekOrigin.Begin); uint jumpSize = myStream.ReadValueU32(); myStream.Seek(jumpSize * 8, SeekOrigin.Current); uint blockSize; do { temp = new Inventory(); long position = myStream.Position; uint value = myStream.ReadValueU32(); blockSize = value & 0xFFFF; uint offset = (uint)myStream.Position; uint fileSize = myStream.ReadValueU32(); myStream.Seek(20, SeekOrigin.Current); string filePath = myStream.ReadStringZ(); myStream.Seek(position + blockSize, SeekOrigin.Begin); temp.name = filePath; temp.offset = offset; temp.size = fileSize; content.Add(temp); } while (blockSize != 0); } myStream.Close(); } }