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(); }
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"); } }