Exemplo n.º 1
0
        public Save(string filePath)
        {
            if (File.Exists(filePath))
            {
                if (_saveFile != null)
                {
                    _saveReader.Close();
                    _saveFile.Close();
                }
                try { _saveFile = new FileStream(filePath, FileMode.Open); } catch { SuccessfullyLoaded = false; }
                if (_saveFile == null || !SuccessfullyLoaded || !_saveFile.CanWrite)
                {
                    MessageBox.Show(
                        $"Error: File {Path.GetFileName(filePath)} is being used by another process. Please close any process using it before editing!",
                        "File Opening Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    try
                    {
                        _saveFile?.Close();
                    }
                    catch
                    {
                        // ignored
                    }
                    return;
                }

                _saveReader = new BinaryReader(_saveFile);
                SaveData    = _saveReader.ReadBytes((int)_saveFile.Length);
                _byteswap   = this.IsByteSwapped();
                if (_byteswap)
                {
                    SaveData = SaveDataManager.ByteSwap(SaveData); // Only byteswap the working data.
                }

                SaveType            = this.GetSaveType();
                SaveGeneration      = SaveDataManager.GetSaveGeneration(SaveType);
                FullSavePath        = filePath;
                SaveName            = Path.GetFileNameWithoutExtension(filePath);
                SavePath            = Path.GetDirectoryName(filePath) + Path.DirectorySeparatorChar;
                SaveExtension       = Path.GetExtension(filePath);
                SaveId              = SaveDataManager.GetGameId(SaveType);
                SaveDataStartOffset = SaveDataManager.GetSaveDataOffset(SaveId.ToLower(), SaveExtension?.Replace(".", "").ToLower());
                SaveInfo            = SaveDataManager.GetSaveInfo(SaveType);

                if (SaveType == SaveType.WildWorld || SaveGeneration == SaveGeneration.N3DS)
                {
                    IsBigEndian = false;
                }

                _saveReader.Close();
                _saveFile.Close();
                _saveReader.Dispose();
                _saveFile.Dispose();

                // Create a Backup
                if (Properties.Settings.Default.BackupFiles)
                {
                    _backup = new Backup(this);
                }
            }
            else
            {
                MessageBox.Show("File doesn't exist!");
            }
        }