private void openButton_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Binary files (*.bin)|*.bin|All files (*.*)|*.*";
if (openFileDialog.ShowDialog() != DialogResult.OK) return;
long length = (new FileInfo(openFileDialog.FileName)).Length;
if (length > saveLength_EUR)
{
MessageBox.Show("Invalid save file", "Error");
return;
}
// Open a decompressed save file, for testing purpose
if (length == saveLength_EUR)
{
Header = null;
SaveData = File.ReadAllBytes(openFileDialog.FileName);
enableButtons();
return;
}
Header = new byte[headerLength_EUR];
byte[] compressed = new byte[length - headerLength_EUR];
using (FileStream fs = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read))
{
using (BinaryReader br = new BinaryReader(fs))
{
br.BaseStream.Seek(headerLength_EUR, SeekOrigin.Begin);
byte isLZ11 = br.ReadByte();
if (isLZ11 != 0x11)
{
MessageBox.Show("Invalid save file", "Error");
return;
}
br.BaseStream.Seek(0x00, SeekOrigin.Begin);
br.Read(Header, 0x0, headerLength_EUR);
br.Read(compressed, 0x0, (int)length - headerLength_EUR);
}
}
// Decompress
byte[] decompressed = null;
LZ11 lz11 = new LZ11();
using (MemoryStream inStream = new MemoryStream(compressed))
{
using (MemoryStream outStream = new MemoryStream())
{
lz11.Decompress(inStream, compressed.Length, outStream);
if (outStream != null)
decompressed = outStream.ToArray();
else
{
MessageBox.Show("Invalid save file", "Error");
return;
}
}
}
// Check file validity and save loading
if (decompressed.Length != saveLength_EUR)
{
labelRegion.Text = "USA";
MessageBox.Show("Invalid save file", "Error");
return;
}
SaveData = decompressed;
labelRegion.Text = "EUR";
enableButtons();
}