public void Load(byte[] file, VpkVersions.Versions version = VpkVersions.Versions.V1) { if (version == VpkVersions.Versions.V1) { _reader = new VpkReaderV1(file); } else if (version == VpkVersions.Versions.V2) { _reader = new V2.VpkReaderV2(file); } var hdr = _reader.ReadArchiveHeader(); if (!hdr.Verify()) { throw new ArchiveParsingException("Invalid archive header"); } Directories.AddRange(_reader.ReadDirectories(this)); }
/// <summary> /// The main Load function, the related parts need to be numbered correctly as "archivename_01.vpk" and so forth /// </summary> /// <param name="mainPartStream"></param> /// <param name="filename"></param> /// <param name="version"></param> /// <param name="parts"></param> public void Load(Stream mainPartStream, string filename = "", VpkVersions.Versions version = VpkVersions.Versions.V1, Dictionary <Stream, string> parts = null) { if (Loaded) { throw new NotSupportedException("Tried to call Load on a VpkArchive that is already loaded, dispose and create a new one instead"); } if (string.IsNullOrEmpty(filename)) { filename = "stream_dir.vpk"; } if (version == VpkVersions.Versions.V1) { Reader = new VpkReaderV1(mainPartStream); } else if (version == VpkVersions.Versions.V2) { Reader = new VpkReaderV2(mainPartStream); } var hdr = Reader.ReadArchiveHeader(); if (!hdr.Verify()) { throw new ArchiveParsingException("Invalid archive header"); } //Jvs: moved these down here as we want the header error as soon as possible AddMainPart(filename, mainPartStream); if (parts?.Count > 0) { LoadParts(parts); } InternalDirectories.AddRange(Reader.ReadDirectories(this)); Loaded = true; }
public void Load(string filename, VpkVersions.Versions version = VpkVersions.Versions.V1) { ArchivePath = filename; IsMultiPart = filename.EndsWith("_dir.vpk"); if (IsMultiPart) { LoadParts(filename); } if (version == VpkVersions.Versions.V1) { _reader = new VpkReaderV1(filename); } else if (version == VpkVersions.Versions.V2) { _reader = new V2.VpkReaderV2(filename); } var hdr = _reader.ReadArchiveHeader(); if (!hdr.Verify()) { throw new ArchiveParsingException("Invalid archive header"); } Directories.AddRange(_reader.ReadDirectories(this)); }
/// <summary> /// Loads a vpk archive by stream, the related parts need to be ordered correctly in the list /// </summary> /// <param name="mainPartStream"></param> /// <param name="parts"></param> /// <param name="filename"></param> /// <param name="version"></param> public void Load(Stream mainPartStream, List <Stream> parts, string filename = "", VpkVersions.Versions version = VpkVersions.Versions.V1) { Dictionary <Stream, string> streamParts = null; if (parts?.Count > 0) { streamParts = new Dictionary <Stream, string>(); int index = 0; foreach (var streamPart in parts) { streamParts.Add(streamPart, $"stream_{index}.vpk"); index++; } } Load(mainPartStream, filename, version, streamParts); }
/// <summary> /// Loads the specified vpk archive by filename, if it's a _dir.vpk file it'll load related numbered vpks automatically /// </summary> /// <param name="filename">A vpk archive ending in _dir.vpk</param> /// <param name="version"></param> public void Load(string filename, VpkVersions.Versions version = VpkVersions.Versions.V1) { Load(new FileStream(filename, FileMode.Open, FileAccess.Read), filename, version, LoadFileParts(filename)); }