public void Start(string playerName, PlayerCharacterDataType type, FileVersion fileVer)
 {
     string fileVerStr = fileVer.ToString();
     fileVerStr = fileVerStr.Replace('_', '.');
     Start(playerName, type, fileVerStr);
 }
        public void Start(string playerName, PlayerCharacterDataType type, string fileVer)
        {
            playerName = playerName.ToLower();

            if (!exists(playerName))
                throw new PlayerCharacterDoesNotExistException(playerName);

            End(); // Just in case

            string withNameDirectory = buildPlayerPath(playerName);

            string extention = ".null";
            switch (type)
            {
                case (PlayerCharacterDataType.PCAppearance):
                    extention = ".appearance";
                    break;
                case (PlayerCharacterDataType.PCAttributes):
                    extention = ".attributes";
                    break;
                case(PlayerCharacterDataType.PCLocation):
                    extention = ".location";
                    break;
                case(PlayerCharacterDataType.PCInventory):
                    extention = ".inventory";
                    break;
                case (PlayerCharacterDataType.PCSkills):
                    extention = ".skills";
                    break;
                case (PlayerCharacterDataType.PCEnergies):
                    extention = ".energies";
                    break;
                default:
                    throw new ArgumentException("Unrecognized type of player data");
            }

            // Open
            string filePath = Path.Combine(withNameDirectory, playerName + extention);
            fs = new FileStream(filePath, FileMode.Create, FileAccess.Write);
            bw = new BinaryWriter(fs);

            // Write version
            WriteValue(fileVer);
        }
        public void Start(string playerName, PlayerCharacterDataType type, string fileVer)
        {
            playerName = playerName.ToLower();

            if (!exists(playerName))
                throw new PlayerCharacterDoesNotExistException(playerName);

            End(); // Just in case

            string withNameDirectory = buildPlayerPath(playerName);

            string extention = ".null";
            switch (type)
            {
                case (PlayerCharacterDataType.PCAppearance):
                    extention = ".appearance";
                    break;
                case (PlayerCharacterDataType.PCAttributes):
                    extention = ".attributes";
                    break;
                case(PlayerCharacterDataType.PCLocation):
                    extention = ".location";
                    break;
                case(PlayerCharacterDataType.PCInventory):
                    extention = ".inventory";
                    break;
                case (PlayerCharacterDataType.PCSkills):
                    extention = ".skills";
                    break;
                case (PlayerCharacterDataType.PCEnergies):
                    extention = ".energies";
                    break;
                default:
                    throw new ArgumentException("Unrecognized type of player data");
            }

            // Open
            string filePath = Path.Combine(withNameDirectory, playerName + extention);
            fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            br = new BinaryReader(fs);

            // Read version
            string ver = ReadString();
            if (ver != fileVer)
                throw new InvalidOperationException("File version is wrong for this deserializer. Should be: "
                    + fileVer + ", is: " + ver);
        }