public void OpenMemoryCard(string filePath) { try { _filePath = filePath; ParseFileData(); if (_memoryCard != null) { _view.UpdateOpenedFile(Path.GetFileName(filePath)); _view.UpdateBlockList(_memoryCard.Blocks.Select(x => FormatBlockTitle(x)).ToList(), _memoryCard.Blocks.Select(x => x.Icon != null ? ParseBitmap(x.Icon) : new Bitmap(16, 16)).ToList()); } } catch (Exception ex) { // Undo memory card loading _memoryCard = null; _filePath = null; Trace.Write(ex.Message); Trace.Write(ex.StackTrace); _view.HandleError(ex); } }
private void ParseFileData() { byte[] _data; try { using (FileStream fs = File.Open(_filePath, FileMode.Open)) { _data = new byte[fs.Length]; fs.Read(_data, 0, (int)fs.Length); } if (DirectoryFrameParser.IsValidHeaderFrame(_data.SubArray(0, 128))) { _memoryCard = new MemoryCard(); _memoryCard.FileName = Path.GetFileName(_filePath); for (int i = 1; i < 16; ++i) { _memoryCard.DirectoryFrames.Add(DirectoryFrameParser.Parse(_data.SubArray(128 * i, 128))); _memoryCard.Blocks.Add(BlockParser.Parse(_data.SubArray(8192 * i, 8192))); } } else { throw new InvalidDataException("Selected file is not a valid PSX memory card."); } } catch (Exception ex) { throw ex; } }