private DirectoryInfoData GetDirectoryInfo(string path) { DirectoryInfoData data = new DirectoryInfoData { FilesCount = new NumericValue <int>(0, 0, int.MaxValue), ItemTypes = ItemType.Undefined, LastItemId = new NumericValue <int>(0, 0, int.MaxValue), FirstUnusedId = new NumericValue <int>(0, 0, int.MaxValue), }; try { var ids = new List <bool> { true }; foreach (var file in Directory.EnumerateFiles(path, "*.json", SearchOption.TopDirectoryOnly)) { var text = File.ReadAllText(file); var item = JsonConvert.DeserializeObject <SerializableItem>(text); data.FilesCount.Value++; if (item.ItemType == ItemType.Undefined) { continue; } if (ids.Count <= item.Id) { ids.AddRange(Enumerable.Repeat(false, item.Id - ids.Count + 1)); } ids[item.Id] = true; if (data.ItemTypes == ItemType.Undefined) { data.ItemTypes = item.ItemType; } } data.LastItemId.Value = ids.Count - 1; var index = ids.IndexOf(false); data.FirstUnusedId.Value = index > 0 ? index : ids.Count; } catch (Exception e) { } return(data); }
private DirectoryInfoData GetDirectoryInfo(string path) { DirectoryInfoData data = new DirectoryInfoData { FilesCount = new NumericValue <int>(0, 0, int.MaxValue), ItemTypes = ItemType.Undefined, LastItemId = new NumericValue <int>(0, 0, int.MaxValue), FirstUnusedId = new NumericValue <int>(0, 0, int.MaxValue), }; try { var ids = new HashSet <int>(); var top = 0; foreach (var file in Directory.EnumerateFiles(path, "*.json", SearchOption.TopDirectoryOnly)) { var text = File.ReadAllText(file); var item = JsonConvert.DeserializeObject <SerializableItem>(text); data.FilesCount.Value++; if (item.ItemType == ItemType.Undefined) { continue; } ids.Add(item.Id); top = Math.Max(top, item.Id); if (data.ItemTypes == ItemType.Undefined) { data.ItemTypes = item.ItemType; } } data.LastItemId.Value = top; var index = 0; while (ids.Contains(index)) { index++; } data.FirstUnusedId.Value = index > 0 ? index : top + 1; } catch (Exception e) { } return(data); }