private void ProcessFileInfoList(IEnumerable <FileInfo> filesToProcess) { Cursor = Cursors.WaitCursor; try { RequestQuery.RefreshReportFieldData(); foreach (var fileInfo in filesToProcess) { var fileNameSegments = fileInfo.Name.Split(new[] { '.' }); bool isMergeTemplate = fileNameSegments[0] == "mergetemplate"; int fileId; Int32.TryParse(fileNameSegments[1], out fileId); string actualFileName = isMergeTemplate ? RequestQuery.GetMergeTemplateFileName(fileId) : RequestQuery.GetCustomPrintPacketFileName(fileId); List <string> reportFields = DocumentProcessing.GetMergeFieldIds(fileInfo.FullName); int reportFieldCount = 0; var processedFieldOutput = new StringBuilder(); if (reportFields.Any()) { foreach (string reportField in reportFields) { if (reportField.Contains("RF_")) { reportFieldCount++; var reportFieldInfo = RequestQuery.ReportFieldData.Rows.Find(reportField); processedFieldOutput.AppendLine(reportFieldInfo != null ? string.Format(",,,{0},{1},{2}", reportFieldInfo["ReportFieldTemplateIdHash"], reportFieldInfo["ReportFieldTemplateId"], reportFieldInfo["ReportFieldTemplateName"]) : string.Format(",,,{0},NA,NA", reportField)); } } } reportFieldOutput.AppendLine(string.Format("{0},{1},{2}", actualFileName, fileInfo.FullName, reportFieldCount)); reportFieldOutput.Append(processedFieldOutput); reportFieldOutput.AppendLine(); } } finally { Cursor = Cursors.Default; } try { string outputFileWritePath = string.Format("{0}{1}", outputDestinationTextBox.Text, "ReportFields.csv"); FileProcessing.WriteToCsv(outputFileWritePath, reportFieldOutput); MessageBox.Show(this, string.Format("Report Generated and written to: {0}", outputFileWritePath), "Report Completed", MessageBoxButtons.OK); } catch (Exception eError) { MessageBox.Show(this, eError.Message, "Could not complete action:", MessageBoxButtons.OK, MessageBoxIcon.Error); } }