private static void SaveFile(BinaryReader binaryReader, string directory, string subDirectory, PakItem item) { var path = Path.Combine(directory, subDirectory, item.Path.Substring(1)); var dir = Path.GetDirectoryName(path); Directory.CreateDirectory(dir); using (var fs = File.Open(path, FileMode.Create)) { var bytes = PakReader.ReadItem(binaryReader, item); fs.Write(bytes, 0, bytes.Length); } }
/// <summary> /// Fetches all items in the given pak. /// </summary> /// <param name="pakPath">File path to pak.</param> public void Fetch(string pakPath) { using (FileStream fs = File.Open(pakPath, FileMode.Open)) using (BinaryReader binaryReader = new BinaryReader(fs)) { PakReader reader = new PakReader(); PakData pak = reader.Read(binaryReader); foreach (PakItem item in pak.Items) { string ext = Path.GetExtension(item.Path); if (Extensions == null || Extensions.Count == 0 || ext.Length > 0 && Extensions.Contains(ext.Substring(1).ToLowerInvariant())) { byte[] data = PakReader.ReadItem(binaryReader, item); string s = Encoding.UTF8.GetString(data); OnItemFound?.Invoke(item.Path, s); } } } }