private void FindInstanceTraces(Dictionary<string, TraceInfo> instances) { var files = Directory.GetFiles(_workDirectory, @"graphdat*.trc"); var regex = new Regex(string.Format(@"^{0}\\graphdat_((?<instanceName>.*)_(?<fileNumber>\d+)\.trc|(?<instanceName>.*)\.trc)$", Regex.Escape(_workDirectory))); DebugHelper.LogEntry(_eventLog, string.Format("{0} instance traces found", files.Length)); foreach (var file in files) { var match = regex.Match(file); if (!match.Success || !match.Groups["instanceName"].Success) { DebugHelper.LogEntry(_eventLog, string.Format("File '{0}' regex failed: match {1}, group {2}", file, match.Success, match.Groups["instanceName"].Success)); continue; } var instanceName = match.Groups["instanceName"].Value; var fileNumber = match.Groups["fileNumber"].Success ? int.Parse(match.Groups["fileNumber"].Value) : 0; if (!instances.ContainsKey(instanceName)) { DebugHelper.LogEntry(_eventLog, string.Format("First instance trace: {0} ({1})", instanceName, fileNumber)); instances[instanceName] = new TraceInfo { MaxFileNumber = fileNumber }; } else if (instances[instanceName].MaxFileNumber < fileNumber) { DebugHelper.LogEntry(_eventLog, string.Format("New instance trace: {0} ({1})", instanceName, fileNumber)); instances[instanceName].TraceRead = false; instances[instanceName].MaxFileNumber = fileNumber; } else { DebugHelper.LogEntry(_eventLog, string.Format("Old instance trace: {0} ({1}, last: {2})", instanceName, fileNumber, instances[instanceName].MaxFileNumber)); } } }