//파일에서 문자열 읽기 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 { } } } }