public bool Open(Stream fs) { fs.Seek(0, SeekOrigin.Begin); Header = MarshalUtil.ReadStruct <DARCHeader>(fs); fs.Seek(Header.FileTableOffset + 8, SeekOrigin.Begin); var fileCount = fs.ReadByte(); fs.Seek(Header.FileTableOffset, SeekOrigin.Begin); while (fileCount > 0) { var entry = MarshalUtil.ReadStruct <DARCFileTableEntry>(fs); Files.Add(entry); fileCount--; } var nameTableOffset = fs.Position; for (var i = 0; i < Files.Count; i++) { fs.Seek(nameTableOffset + Files[i].NameOffset, SeekOrigin.Begin); var mems = new MemoryStream(); int firstByte = 1, secondByte = 1; while (firstByte != 0 || secondByte != 0) { firstByte = fs.ReadByte(); secondByte = fs.ReadByte(); mems.WriteByte((byte)firstByte); mems.WriteByte((byte)secondByte); } FileNames.Add(Encoding.Unicode.GetString(mems.ToArray())); mems.Close(); } return(true); }
public bool Open(Stream fs) { fs.Seek(0, SeekOrigin.Begin); Header = MarshalUtil.ReadStruct<DARCHeader>(fs); fs.Seek(Header.FileTableOffset + 8, SeekOrigin.Begin); var fileCount = fs.ReadByte(); fs.Seek(Header.FileTableOffset, SeekOrigin.Begin); while (fileCount > 0) { var entry = MarshalUtil.ReadStruct<DARCFileTableEntry>(fs); Files.Add(entry); fileCount--; } var nameTableOffset = fs.Position; for (var i = 0; i < Files.Count; i++) { fs.Seek(nameTableOffset + Files[i].NameOffset, SeekOrigin.Begin); var mems = new MemoryStream(); int firstByte = 1, secondByte = 1; while (firstByte != 0 || secondByte != 0) { firstByte = fs.ReadByte(); secondByte = fs.ReadByte(); mems.WriteByte((byte)firstByte); mems.WriteByte((byte)secondByte); } FileNames.Add(Encoding.Unicode.GetString(mems.ToArray())); mems.Close(); } return true; }