protected override void DoTaskForFile(string pPath,
                                              IVgmtWorkerStruct pExamineSearchForFileStruct, DoWorkEventArgs e)
        {
            ExamineSearchForFileStruct examineSearchForFileStruct =
                (ExamineSearchForFileStruct)pExamineSearchForFileStruct;

            StringBuilder filePaths          = new StringBuilder();
            StringBuilder searchStringHeader = new StringBuilder();

            string[] compressedFilePaths;
            string   searchString;

            foreach (string s in examineSearchForFileStruct.SearchStrings)
            {
                if (examineSearchForFileStruct.CaseSensitive)
                {
                    searchString = s;
                }
                else
                {
                    searchString = s.ToUpper();
                }

                if ((examineSearchForFileStruct.CaseSensitive &&
                     Path.GetFileName(pPath).Contains(searchString)) ||
                    (!examineSearchForFileStruct.CaseSensitive &&
                     Path.GetFileName(pPath).ToUpper().Contains(searchString)))
                {
                    filePaths.AppendFormat("---= Search String: [{0}] =---{1}", s, Environment.NewLine);
                    filePaths.Append(pPath);
                    filePaths.Append(Environment.NewLine);

                    // copy to destination folder
                    File.Copy(pPath, Path.Combine(examineSearchForFileStruct.OutputFolder, Path.GetFileName(pPath)));
                }
                else // check to see if this is an archive
                {
                    compressedFilePaths = CompressionUtil.GetFileList(pPath);

                    // Extract if inside a compressed file
                    if (compressedFilePaths != null)
                    {
                        foreach (string f in compressedFilePaths)
                        {
                            if ((examineSearchForFileStruct.CaseSensitive &&
                                 f.Contains(searchString)) ||
                                (!examineSearchForFileStruct.CaseSensitive &&
                                 f.ToUpper().Contains(searchString)))
                            {
                                filePaths.AppendFormat("---= Search String: [{0}] =---{1}", s, Environment.NewLine);
                                filePaths.AppendFormat("{0} ({1})", pPath, f);
                                filePaths.Append(Environment.NewLine);

                                if (examineSearchForFileStruct.ExtractFile)
                                {
                                    CompressionUtil.ExtractFileFromArchive(pPath, f, examineSearchForFileStruct.OutputFolder);
                                }
                            }
                        }
                    }
                }

                this.progressStruct.Clear();
                progressStruct.GenericMessage = filePaths.ToString();
                ReportProgress(this.Progress, progressStruct);
            }
        }