public Packfile(Stream stream) { DataStream = stream; stream.Seek(0, SeekOrigin.Begin); FileData = stream.ReadStruct <PackfileFileData>(); m_Files = new List <IPackfileEntry>(); stream.Seek(GetEntryDataOffset(), SeekOrigin.Begin); List <PackfileEntryFileData> entryFileData = new List <PackfileEntryFileData>(); for (int i = 0; i < FileData.IndexCount; i++) { var fileData = stream.ReadStruct <PackfileEntryFileData>(); entryFileData.Add(fileData); } List <string> fileNames = new List <string>(); for (int i = 0; i < FileData.IndexCount; i++) { var fileData = entryFileData[i]; stream.Seek(CalculateEntryNamesOffset() + fileData.FilenameOffset, SeekOrigin.Begin); string name = stream.ReadAsciiNullTerminatedString(); stream.Seek(CalculateExtensionsOffset() + fileData.ExtensionOffset, SeekOrigin.Begin); string extension = stream.ReadAsciiNullTerminatedString(); m_Files.Add(new PackfileEntry(this, fileData, name + "." + extension)); } }
public Packfile(Stream stream) { DataStream = stream; stream.Seek(0, SeekOrigin.Begin); FileData = stream.ReadStruct<PackfileFileData>(); m_Files = new List<IPackfileEntry>(); stream.Seek(GetEntryDataOffset(), SeekOrigin.Begin); List<PackfileEntryFileData> entryFileData = new List<PackfileEntryFileData>(); for (int i = 0; i < FileData.IndexCount; i++) { var fileData = stream.ReadStruct<PackfileEntryFileData>(); entryFileData.Add(fileData); } List<string> fileNames = new List<string>(); for (int i = 0; i < FileData.IndexCount; i++) { var fileData = entryFileData[i]; stream.Seek(CalculateEntryNamesOffset() + fileData.FilenameOffset, SeekOrigin.Begin); string name = stream.ReadAsciiNullTerminatedString(); stream.Seek(CalculateExtensionsOffset() + fileData.ExtensionOffset, SeekOrigin.Begin); string extension = stream.ReadAsciiNullTerminatedString(); m_Files.Add(new PackfileEntry(this, fileData, name + "." + extension)); } }
public Packfile(Stream stream, bool isStr2) { IsStr2 = isStr2; stream.Seek(0, SeekOrigin.Begin); FileData = stream.ReadStruct <PackfileFileData>(); m_Files = new List <IPackfileEntry>(); uint runningPosition = 0; List <PackfileEntryFileData> entryFileData = new List <PackfileEntryFileData>(); for (int i = 0; i < FileData.NumFiles; i++) { PackfileEntryFileData data = stream.ReadStruct <PackfileEntryFileData>(); if (IsCondensed && IsCompressed) { data.Flags = 0; data.Start = runningPosition; runningPosition += data.Size; } else if (IsCondensed) { data.Start = runningPosition; runningPosition += data.Size.Align(16); } entryFileData.Add(data); } for (int i = 0; i < FileData.NumFiles; i++) { stream.Align(2); string filename = stream.ReadAsciiNullTerminatedString(); stream.Seek(1, SeekOrigin.Current); m_Files.Add(new PackfileEntry(this, entryFileData[i], filename)); stream.Align(2); } if (IsCondensed && IsCompressed) { DataOffset = 0; byte[] compressedData = new byte[FileData.CompressedDataSize]; stream.Read(compressedData, 0, (int)FileData.CompressedDataSize); using (MemoryStream tempStream = new MemoryStream(compressedData)) { using (Stream s = new ZlibStream(tempStream, CompressionMode.Decompress, true)) { byte[] uncompressedData = new byte[FileData.DataSize]; s.Read(uncompressedData, 0, (int)FileData.DataSize); DataStream = new MemoryStream(uncompressedData); } } } else { DataStream = stream; DataOffset = stream.Position; } }
public Packfile(Stream stream, bool isStr2) { IsStr2 = isStr2; stream.Seek(0, SeekOrigin.Begin); FileData = stream.ReadStruct<PackfileFileData>(); m_Files = new List<IPackfileEntry>(); uint runningPosition = 0; List<PackfileEntryFileData> entryFileData = new List<PackfileEntryFileData>(); for (int i = 0; i < FileData.NumFiles; i++) { PackfileEntryFileData data = stream.ReadStruct<PackfileEntryFileData>(); if (IsCondensed && IsCompressed) { data.Flags = 0; data.Start = runningPosition; runningPosition += data.Size; } else if (IsCondensed) { data.Start = runningPosition; runningPosition += data.Size.Align(16); } entryFileData.Add(data); } for (int i = 0; i < FileData.NumFiles; i++) { stream.Align(2); string filename = stream.ReadAsciiNullTerminatedString(); stream.Seek(1, SeekOrigin.Current); m_Files.Add(new PackfileEntry(this, entryFileData[i], filename)); stream.Align(2); } if (IsCondensed && IsCompressed) { DataOffset = 0; byte[] compressedData = new byte[FileData.CompressedDataSize]; stream.Read(compressedData, 0, (int)FileData.CompressedDataSize); using (MemoryStream tempStream = new MemoryStream(compressedData)) { using (Stream s = new ZlibStream(tempStream, CompressionMode.Decompress, true)) { byte[] uncompressedData = new byte[FileData.DataSize]; s.Read(uncompressedData, 0, (int)FileData.DataSize); DataStream = new MemoryStream(uncompressedData); } } } else { DataStream = stream; DataOffset = stream.Position; } }
public PegFile(Stream s) { Entries = new List <PegEntry>(); Header = s.ReadStruct <PegHeader>(); for (int i = 0; i < Header.TotalEntries; i++) { PegEntry entry = new PegEntry(); entry.Data = s.ReadStruct <PegEntryData>(); Entries.Add(entry); } for (int i = 0; i < Header.TotalEntries; i++) { PegEntry entry = Entries[i]; string filename = s.ReadAsciiNullTerminatedString(); entry.Filename = filename; } }
public VFile(Stream s) { References = new List <string>(); Header = s.ReadStruct <VFileHeader>(); long position = s.Position; s.Seek(position + Header.ReferenceDataStart, SeekOrigin.Begin); for (int i = 0; i < Header.ReferenceCount; i++) { string reference = s.ReadAsciiNullTerminatedString(); References.Add(reference); } s.Seek(position + Header.ReferenceDataSize + 1, SeekOrigin.Begin); if (Header.Version >= 2) { s.Align(16); } }
public Packfile(Stream stream) { stream.Seek(0, SeekOrigin.Begin); FileData = stream.ReadStruct<PackfileFileData>(); m_Files = new List<IPackfileEntry>(); stream.Seek(GetEntryDataOffset(), SeekOrigin.Begin); List<PackfileEntryFileData> entryFileData = new List<PackfileEntryFileData>(); for (int i = 0; i < FileData.NumFiles; i++) { var fileData = stream.ReadStruct<PackfileEntryFileData>(); entryFileData.Add(fileData); } uint runningPosition = 0; List<string> fileNames = new List<string>(); for (int i = 0; i < FileData.NumFiles; i++) { var fileData = entryFileData[i]; stream.Seek(CalculateEntryNamesOffset() + fileData.Name, SeekOrigin.Begin); string name = stream.ReadAsciiNullTerminatedString(); //stream.Seek(CalculateExtensionsOffset() + fileData., SeekOrigin.Begin); //string extension = stream.ReadAsciiNullTerminatedString(); if (IsCondensed && IsCompressed) { fileData.Start = runningPosition; runningPosition += fileData.Size.Align(64); } else if (IsCondensed) { fileData.Start = runningPosition; runningPosition += fileData.Size.Align(16); } else if (IsCompressed) { fileData.Start = runningPosition; runningPosition += fileData.CompressedSize.Align(2048); } m_Files.Add(new PackfileEntry(this, fileData, name)); } if (IsCondensed && IsCompressed) { stream.Seek(CalculateDataStartOffset(), SeekOrigin.Begin); DataOffset = 0; byte[] compressedData = new byte[FileData.CompressedDataSize]; stream.Read(compressedData, 0, (int)FileData.CompressedDataSize); using (MemoryStream tempStream = new MemoryStream(compressedData)) { using (Stream s = new ZlibStream(tempStream, CompressionMode.Decompress, true)) { byte[] uncompressedData = new byte[FileData.DataSize]; s.Read(uncompressedData, 0, (int)FileData.DataSize); DataStream = new MemoryStream(uncompressedData); } } DataStream.Seek(0, SeekOrigin.Begin); } else { DataStream = stream; DataOffset = CalculateDataStartOffset(); } }