private byte[] ReadFileData(uint dataOffset, uint dataSize) { try { //current position to seek back to when done var getBack = PakStreamReader.BaseStream.Position; //seek to file data location PakStreamReader.BaseStream.Seek(dataOffset, SeekOrigin.Begin); //extract data from specified information var data = PakStreamReader.ReadBytes(Convert.ToInt32(dataSize)); //seek back to original location PakStreamReader.BaseStream.Seek(getBack, SeekOrigin.Begin); //return result return(data); } catch (Exception ex) { MessageBox.Show($"Error whilst attempting PAK extraction:\n\n{ex}"); } //default return(null); }
private string ReadFileName(uint nameOffset) { //current position to seek back to when done var getBack = PakStreamReader.BaseStream.Position; //debugging //MessageBox.Show(getBack.ToString()); //MessageBox.Show(offset.ToString()); //seek to the name offset PakStreamReader.BaseStream.Seek(nameOffset, SeekOrigin.Begin); //verify UTF-8 if (PakStreamReader.ReadByte() > 240) { return(""); } //seek back to the name offset PakStreamReader.BaseStream.Seek(nameOffset, SeekOrigin.Begin); //where the name is stored var array = new byte[200]; //the loop kill switch var flag = true; //size of name data array var newSize = 0; while (flag) { var num = PakStreamReader.ReadByte(); //is is null? if (num == 0) { Array.Resize(ref array, newSize); flag = false; } else { array[newSize] = num; ++newSize; } } //go back to the previous position PakStreamReader.BaseStream.Seek(getBack, SeekOrigin.Begin); //return UTF-8 encoded string return(Encoding.UTF8.GetString(array, 0, array.Length)); }