Example #1
0
        public BlobDatabase(FileStream stream, Action <string> errorLogger)
        {
            _databaseFile = stream;
            _database     = new FoxBlob();

            _databaseFile.Seek(0L, SeekOrigin.Begin);

            try {
                _database = (FoxBlob)_bf.Deserialize(_databaseFile);

                _databaseFile.Seek(0, SeekOrigin.Begin);

                File.WriteAllBytes(_databaseFile.Name + ".bak", _databaseFile.ReadAllBytes());
            } catch {
                if (File.Exists(_databaseFile.Name + ".bak"))
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    errorLogger($"{_databaseFile.Name} was corrupt. Will revert to backup file");
                    Console.ResetColor();

                    using (var ms = new MemoryStream(File.ReadAllBytes(_databaseFile.Name + ".bak"))) {
                        _database = (FoxBlob)_bf.Deserialize(ms);
                    }
                }
            }

            NeedsStore();
            Save();
        }
Example #2
0
        protected BlobFile(FileStream stream, bool binary = false)
        {
            Blob = new FoxBlob();
            if (stream == null)
            {
                return;
            }

            _fileStream = stream;
            _binary     = binary;
            _fileStream.Seek(0, SeekOrigin.Begin);

            if (_fileStream.Length == 0)
            {
                ForceSave();
                return;
            }

            try {
                if (binary)
                {
                    Blob = (FoxBlob)_bf.Deserialize(_fileStream);
                }
                else
                {
                    Blob.ReadJson(_fileStream.ReadAllText());
                }

                stream.Seek(0, SeekOrigin.Begin);

                File.WriteAllBytes(stream.Name + ".bak", stream.ReadAllBytes());
            } catch {
                Logger.WriteLine($"{stream.Name} was corrupt. Default values will be loaded");
            }
        }