private void ParseFiles() { foreach (var file in files) { using (var fileStream = new FileStream(file.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (var reader = new StreamReader(fileStream)) { TraceInfo ti = null; string line; while ((line = reader.ReadLine()) != null) { if (line.Trim().StartsWith("#") || string.IsNullOrEmpty(line)) { continue; } if (line.StartsWith("[")) { var lineParts = line.Split('|'); if (lineParts.Length == 1) { ti.Description += lineParts[0]; continue; } if (ti != null) { traces.Add(ti); } var threadParts = lineParts[2].Split(':'); var list = threadParts.ToList(); list.RemoveAt(0); ti = new TraceInfo(); for (int i = 0; i < lineParts.Length; i++) { if (i == 0) { var parts = lineParts[i].Split(']'); ti.Date = DateTime.Parse(parts[0].Remove(0, 1)); ti.Process = parts[1].Trim().Split(':')[1].Trim(); allItems.TryAdd(FilterItemType.Process, ti.Process); } else { if (ti.Process == "OUTLOOK") { var parts = lineParts[i].Split(':'); switch (parts[0].Trim()) { case "Thread": ti.Thread = parts[1].Trim(); allItems.TryAdd(FilterItemType.Thread, ti.Thread); break; case "Category": ti.Category = parts[1].Trim(); allItems.TryAdd(FilterItemType.Category, ti.Category); break; case "User": ti.User = new UserInfo { Id = new Guid(parts[1].Trim()) }; allItems.TryAdd(FilterItemType.User, ti.User); break; case "Level": ti.Level = parts[1].Trim(); allItems.TryAdd(FilterItemType.Level, ti.Level); break; default: ti.Description = lineParts[i].Trim() + "\r\n"; break; } ti.Organization = string.Empty; ti.ReqId = string.Empty; ti.Context = string.Empty; } else { var parts = lineParts[i].Split(':'); switch (parts[0].Trim()) { case "Organization": ti.Organization = parts[1].Trim(); allItems.TryAdd(FilterItemType.Organization, ti.Organization); break; case "Thread": ti.Thread = parts[1].Trim(); allItems.TryAdd(FilterItemType.Thread, ti.Thread); break; case "Category": ti.Category = parts[1].Trim(); allItems.TryAdd(FilterItemType.Category, ti.Category); break; case "User": ti.User = new UserInfo { Id = new Guid(parts[1].Trim()) }; allItems.TryAdd(FilterItemType.User, ti.User); break; case "Level": ti.Level = parts[1].Trim(); allItems.TryAdd(FilterItemType.Level, ti.Level); break; case "ReqId": ti.ReqId = parts[1].Trim(); allItems.TryAdd(FilterItemType.ReqId, ti.ReqId); break; default: ti.Context = lineParts[i].Trim().Split(' ')[0]; allItems.TryAdd(FilterItemType.Operation, ti.Context); break; } } } } } else if (line.StartsWith(">")) { ti.Description += line.Remove(0, 1) + "\r\n"; } else { ti.Description += line + "\r\n"; } } } } }