public Save(string File_Path) { if (File.Exists(File_Path)) { if (Save_File != null) { Save_Reader.Close(); Save_File.Close(); } bool Failed_to_Load = false; try { Save_File = new FileStream(File_Path, FileMode.Open); } catch { Failed_to_Load = true; } if (Save_File == null || Failed_to_Load || !Save_File.CanWrite) { MessageBox.Show(string.Format("Error: File {0} is being used by another process. Please close any process using it before editing!", Path.GetFileName(File_Path)), "File Opening Error"); try { Save_File.Close(); } catch { }; return; } Save_Reader = new BinaryReader(Save_File); Original_Save_Data = Save_Reader.ReadBytes((int)Save_File.Length); Working_Save_Data = new byte[Original_Save_Data.Length]; Buffer.BlockCopy(Original_Save_Data, 0, Working_Save_Data, 0, Original_Save_Data.Length); Save_Type = SaveDataManager.GetSaveType(Original_Save_Data); Game_System = SaveDataManager.GetGameSystem(Save_Type); Full_Save_Path = File_Path; Save_Name = Path.GetFileNameWithoutExtension(File_Path); Save_Path = Path.GetDirectoryName(File_Path) + Path.DirectorySeparatorChar; Save_Extension = Path.GetExtension(File_Path); Save_ID = SaveDataManager.GetGameID(Save_Type); Save_Data_Start_Offset = SaveDataManager.GetSaveDataOffset(Save_ID.ToLower(), Save_Extension.Replace(".", "").ToLower()); Save_Info = SaveDataManager.GetSaveInfo(Save_Type); if (Save_Type == SaveType.Doubutsu_no_Mori) { Original_Save_Data = SaveDataManager.ByteSwap(Original_Save_Data); Working_Save_Data = SaveDataManager.ByteSwap(Working_Save_Data); } if (Save_Type == SaveType.Wild_World || Save_Type == SaveType.New_Leaf || Save_Type == SaveType.Welcome_Amiibo) { Is_Big_Endian = false; } Save_Reader.Close(); Save_File.Close(); } else { MessageBox.Show("File doesn't exist!"); } }
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); if (_saveFile.Length == 0x20000) { var data = _saveReader.ReadBytes(0x20000); if (Encoding.ASCII.GetString(data, 4, 4) == "JFAN") // Check for DnM which is byteswapped { OriginalSaveData = SaveDataManager.ByteSwap(data); SaveType = SaveType.DoubutsuNoMori; } else { OriginalSaveData = data; SaveType = SaveType.AnimalForest; } } else { OriginalSaveData = _saveReader.ReadBytes((int)_saveFile.Length); } WorkingSaveData = new byte[OriginalSaveData.Length]; Buffer.BlockCopy(OriginalSaveData, 0, WorkingSaveData, 0, OriginalSaveData.Length); SaveType = SaveDataManager.GetSaveType(OriginalSaveData) ?? SaveType; 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!"); } }