public PakNode(Node parent, string name, PakFile pak, PakDirectory directory) { _parent = parent; _name = name; _pak = pak; _pakDirectory = directory; }
public static PakFile OpenPak(string path) { var stream = File.OpenRead(path); using var reader = new BinaryReader(stream, Encoding.UTF8, true); // Read the header first. var magic = reader.ReadBytes(PakMagic.Length); if (!magic.SequenceEqual(PakMagic)) { throw new InvalidOperationException("Unrecognized file type."); } // Read the pak file version. Not useful right now but future proofing is handy. var version = reader.ReadInt32(); if (version == 1) { // Now we can read the Directory Tree. var directoryTreeSize = reader.ReadInt64(); var directoryTree = null as PakDirectory; using (var memStream = new MemoryStream()) { while (directoryTreeSize > 0) { var blockSize = Math.Min((int)directoryTreeSize, 2048); var bytes = reader.ReadBytes(blockSize); memStream.Write(bytes, 0, bytes.Length); directoryTreeSize -= blockSize; } memStream.Seek(0, SeekOrigin.Begin); using (var hReader = new BinaryReader(memStream, Encoding.UTF8)) { directoryTree = ConstructDirectoryTree(hReader); } } var currPos = stream.Position; var node = new PakFile(path, stream, directoryTree, currPos); return(node); } throw new InvalidOperationException("Unsupported Pak File Version."); }