public VpkEntry(VpkDirectory directory, string path, uint crc32, byte[] preloadBytes, ushort archiveIndex, uint entryOffset, uint entryLength) { Directory = directory; Path = path; Crc32 = crc32; PreloadData = preloadBytes; ArchiveIndex = archiveIndex; EntryOffset = entryOffset; EntryLength = entryLength; }
public VpkPackageStreamSource(VpkDirectory directory) { _directory = directory; _entries = new Dictionary <string, VpkEntry>(); _streams = new Dictionary <ushort, Stream>(); _folders = new Dictionary <string, HashSet <string> >(); _files = new Dictionary <string, HashSet <string> >(); foreach (var entry in directory.GetEntries().OfType <VpkEntry>()) { var fn = entry.FullName; _entries.Add(fn, entry); var split = fn.Split('/'); var joined = ""; for (var i = 0; i < split.Length; i++) { var sub = split[i]; var name = joined.Length == 0 ? sub : joined + '/' + sub; if (i == split.Length - 1) { // File name if (!_files.ContainsKey(joined)) { _files.Add(joined, new HashSet <string>()); } _files[joined].Add(name); } else { // Folder name if (!_folders.ContainsKey(joined)) { _folders.Add(joined, new HashSet <string>()); } if (!_folders[joined].Contains(sub)) { _folders[joined].Add(name); } } joined = joined.Length == 0 ? sub : joined + '/' + sub; } } }
public VpkEntryStream(VpkEntry entry, VpkDirectory directory) { _entry = entry; _stream = directory.OpenChunk(_entry); _streamStart = _stream.Position; }