コード例 #1
0
        //파일에서 문자열 읽기
        private void FindFiles(object _sDir)
        {
            string sDir = _sDir as string;
            //string fileContents = null; //문서가 가지고 있는 내용
            List <string> idList = null; //파일별 발견된 주민등록번호들

            // Spire.Doc.Documents.TextSelection[] collectedId = null; //정규식에 의해 검색된 주민번호의 리스트.

            foreach (string filePath in Directory.GetFileSystemEntries(sDir, "*.*")
                     .Where(file => System.IO.Path.GetExtension(file).ToLower().Equals(".txt") ||
                            System.IO.Path.GetExtension(file).ToLower().Equals(".doc") ||
                            System.IO.Path.GetExtension(file).ToLower().Equals(".docx") ||
                            System.IO.Path.GetExtension(file).ToLower().Equals(".xls") ||
                            System.IO.Path.GetExtension(file).ToLower().Equals(".xlsx")))
            {
                // 크로스스레드 해결
                this.Invoke(new MethodInvoker(delegate()
                {
                    consoleTextBox.Text = filePath + " 읽는중..";
                }));

                try
                {
                    string plainText = "";
                    switch (System.IO.Path.GetExtension(filePath))
                    {
                    //TXT파일
                    case ".txt":
                        idList    = new List <string>();
                        plainText = File.ReadAllText(filePath);
                        plainText = plainText.Replace(" ", "");
                        foreach (Match s in Regex.Matches(plainText, patternHyphen))
                        {
                            if (isId(s.Value.ToString()))
                            {
                                idList.Add(s.ToString());
                            }
                        }
                        break;

                    //MS WORD 파일
                    case ".doc":
                    case ".docx":
                        if (System.IO.File.Exists("temp"))
                        {
                            System.IO.File.Delete("temp");
                        }
                        idList = new List <string>();
                        Spire.Doc.Document document = new Spire.Doc.Document();
                        document.LoadFromFile(filePath);
                        document.SaveToTxt("temp", Encoding.UTF8);
                        plainText = System.IO.File.ReadAllText("temp");
                        foreach (Match s in Regex.Matches(plainText, patternHyphen))
                        {
                            if (isId(s.Value.ToString()))
                            {
                                idList.Add(s.ToString());
                            }
                        }
                        //collectedId = document.FindAllPattern(new Regex(patternHyphen));
                        //foreach (Spire.Doc.Documents.TextSelection s in collectedId)
                        //{
                        //    if (isId(s.SelectedText.ToString()))
                        //    {
                        //        idList.Add(s.SelectedText.ToString());
                        //    }
                        //}
                        System.IO.File.Delete("temp");
                        break;

                    //MS EXCEL파일
                    case ".xls":
                    case ".xlsx":
                        plainText = "";
                        idList    = new List <string>();
                        Workbook workbook = new Workbook();

                        //엑셀파일오픈
                        workbook.LoadFromFile(filePath);

                        //각 워크시트별로 파싱
                        for (int i = 0; i < workbook.Worksheets.Count; i++)
                        {
                            Worksheet sheet = workbook.Worksheets[i];
                            if (!sheet.IsEmpty)
                            {
                                if (System.IO.File.Exists("temp"))
                                {
                                    System.IO.File.Delete("temp");
                                }

                                //전체 text 읽기 불가. txt파일 저장 후 파싱
                                sheet.SaveToFile("temp", "|", Encoding.UTF8);
                                plainText += System.IO.File.ReadAllText("temp");
                                plainText += "\r\n";
                            }
                        }
                        plainText = plainText.Replace(" ", "");     //공백제거
                        foreach (Match s in Regex.Matches(plainText, patternHyphen))
                        {
                            if (isId(s.Value.ToString()))
                            {
                                idList.Add(s.ToString());
                            }
                        }
                        System.IO.File.Delete("temp");
                        break;
                    }
                }
                catch
                {
                }

                //발견된 파일이 있으면 리스트에 등록
                if (idList.Count != 0)
                {
                    filesPathAndIdList.Add(new FilesPathAndID(filePath, idList));
                }
            }

            //재귀적으로 디렉토리 탐색
            if ((File.GetAttributes(sDir) & FileAttributes.ReparsePoint) != FileAttributes.ReparsePoint)
            {
                foreach (string d in Directory.GetDirectories(sDir))
                {
                    try
                    {
                        FindFiles(d);
                    }
                    catch
                    {
                    }
                }
            }
        }