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);
            }
        }