/// <summary> /// Loads the specified files into the archive list. /// </summary> /// <param name="archiveFiles"></param> public override void LoadFiles(IEnumerable <string> archiveFiles) { if (m_disposed) { throw new Exception("Object is disposing"); } var loadedFiles = new List <SortedTreeTable <TKey, TValue> >(); foreach (string file in archiveFiles) { try { SortedTreeFile sortedTreeFile = SortedTreeFile.OpenFile(file, isReadOnly: true); var table = sortedTreeFile.OpenTable <TKey, TValue>(); if (table == null) { sortedTreeFile.Dispose(); //archiveFile.Delete(); //ToDo: Consider the consequences of deleting a file. } else { if (m_listLog.ShouldBeDeleted(table.ArchiveId)) { Log.Publish(MessageLevel.Warning, "File being deleted", "The supplied file is being deleted because it was part of a previous rollover that completed but the server crashed before it was properly deleted." + file); table.BaseFile.Delete(); } else { loadedFiles.Add(table); } } Log.Publish(MessageLevel.Info, "Loading Files", "Successfully opened: " + file); } catch (Exception ex) { Log.Publish(MessageLevel.Warning, "Loading Files", "Skipping Failed File: " + file, null, ex); } } using (var edit = AcquireEditLock()) { if (m_disposed) { loadedFiles.ForEach(x => x.Dispose()); throw new Exception("Object is disposing"); } foreach (var file in loadedFiles) { try { edit.Add(file); } catch (Exception ex) { Log.Publish(MessageLevel.Warning, "Attaching File", "File already attached: " + file.ArchiveId, file.BaseFile.FilePath, ex); file.BaseFile.Dispose(); } } } }