Add error recovery around FileLocations.json to handle file corruption

This commit is contained in:
Robert McRackan 2022-02-21 10:24:56 -05:00
parent 0312786721
commit 1e24df626a
2 changed files with 14 additions and 2 deletions

View File

@ -208,7 +208,7 @@ namespace FileManager
{ {
var msg = "Unrecoverable error. Settings file cannot be found"; var msg = "Unrecoverable error. Settings file cannot be found";
var ex = new FileNotFoundException(msg, Filepath); var ex = new FileNotFoundException(msg, Filepath);
Serilog.Log.Logger.Error(msg, ex); Serilog.Log.Logger.Error(ex, msg);
throw ex; throw ex;
} }
@ -226,7 +226,7 @@ namespace FileManager
{ {
var msg = "Unrecoverable error. Unable to read settings from Settings file"; var msg = "Unrecoverable error. Unable to read settings from Settings file";
var ex = new NullReferenceException(msg); var ex = new NullReferenceException(msg);
Serilog.Log.Logger.Error(msg, ex); Serilog.Log.Logger.Error(ex, msg);
throw ex; throw ex;
} }

View File

@ -26,6 +26,18 @@ namespace LibationFileManager
if (File.Exists(jsonFile)) if (File.Exists(jsonFile))
{ {
var list = JsonConvert.DeserializeObject<List<CacheEntry>>(File.ReadAllText(jsonFile)); var list = JsonConvert.DeserializeObject<List<CacheEntry>>(File.ReadAllText(jsonFile));
// file exists but deser is null. this will never happen when file is healthy
if (list is null)
{
lock (locker)
{
Serilog.Log.Logger.Error("Error deserializing file. Wrong format. Possibly corrupt. Deleting file. {@DebugInfo}", new { jsonFile });
File.Delete(jsonFile);
return;
}
}
cache = new Cache<CacheEntry>(list); cache = new Cache<CacheEntry>(list);
} }
} }