private void buttonCompressPCC_Click(object sender, EventArgs e)
        {
            if (openPccDialog.ShowDialog() == DialogResult.OK)
            {
                string fileName   = openPccDialog.FileName;
                string backupFile = fileName + ".bak";
                if (File.Exists(fileName))
                {
                    try
                    {
                        using (ME3Package pccObj = MEPackageHandler.OpenME3Package(fileName))
                        {
                            if (!pccObj.CanReconstruct)
                            {
                                var res = MessageBox.Show("This file contains a SeekFreeShaderCache. Compressing will cause a crash when ME3 attempts to load this file.\n" +
                                                          "Do you want to visit a forum thread with more information and a possible solution?",
                                                          "I'm sorry, Dave. I'm afraid I can't do that.", MessageBoxButtons.YesNo, MessageBoxIcon.Stop);
                                if (res == DialogResult.Yes)
                                {
                                    System.Diagnostics.Process.Start("http://me3explorer.freeforums.org/research-how-to-turn-your-dlc-pcc-into-a-vanilla-one-t2264.html");
                                }
                                return;
                            }
                            DialogResult dialogResult = MessageBox.Show("Do you want to make a backup file?", "Make Backup", MessageBoxButtons.YesNo);
                            if (dialogResult == DialogResult.Yes)
                            {
                                File.Copy(fileName, backupFile);
                            }

                            pccObj.saveByReconstructing(fileName, true);
                        }

                        MessageBox.Show("File " + Path.GetFileName(fileName) + " was successfully compressed.", "Succeed", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    catch (Exception exc)
                    {
                        MessageBox.Show("An error occurred while compressing " + Path.GetFileName(fileName) + ":\n" + exc.Message, "Exception Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        //recovering backup file
                        if (File.Exists(backupFile))
                        {
                            File.Delete(fileName);
                            File.Move(backupFile, fileName);
                        }
                    }
                }
            }
        }
 /*
  * This method is called when using the -compresspcc command line argument
  */
 public static int autoCompressPcc(string sourceFile, string outputFile)
 {
     if (!File.Exists(sourceFile))
     {
         MessageBox.Show("PCC to compress does not exist:\n" + sourceFile, "Auto Compression Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
         return(1);
     }
     using (ME3Package pccObj = MEPackageHandler.OpenME3Package(sourceFile))
     {
         if (!pccObj.CanReconstruct)
         {
             MessageBox.Show("Cannot compress files with a SeekFreeShaderCache", "Auto Compression Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
             return(1);
         }
         pccObj.saveByReconstructing(outputFile, true);
     }
     return(0);
 }
 /*
  * This method is called when using the -decompresspcc command line argument
  */
 public static int autoDecompressPcc(string sourceFile, string outputFile)
 {
     if (!File.Exists(sourceFile))
     {
         MessageBox.Show("PCC to decompress does not exist:\n" + sourceFile, "Auto Decompression Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
         return(1);
     }
     try
     {
         using (ME3Package pccObj = MEPackageHandler.OpenME3Package(sourceFile))
         {
             pccObj.saveByReconstructing(outputFile);
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show("Error:\n" + ex.Message);
         return(1);
     }
     return(0);
 }