파일에서 문자열을 검색 할 때 찾지 못하는 이유는 무엇입니까?

Shmuel Naukarkar

특정 파일 유형에서 문자열을 검색하는 간단한 프로그램을 수행했지만 찾지 못했습니다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Runtime.InteropServices;

namespace Search_Text_In_Files
{
    public partial class Form1 : Form
    {
        StreamWriter w = new StreamWriter(@"e:\textresults.txt");

        public Form1()
        {
            InitializeComponent();

            backgroundWorker1.RunWorkerAsync();
        }

        bool result = false;
        public List<string> FindLines(string DirName, string TextToSearch)
        {
            int counter = 0;
            List<string> findLines = new List<string>();
            DirectoryInfo di = new DirectoryInfo(DirName);

            List<FileInfo> l = new List<FileInfo>();
            CountFiles(di, l);

            int totalFiles = l.Count;
            int countFiles = 0;
            if (di != null && di.Exists)
            {
                if (CheckFileForAccess(DirName) == true)
                {
                    foreach (FileInfo fi in l)
                    {
                        backgroundWorker1.ReportProgress((int)((double)countFiles / totalFiles * 100.0), fi.Name);
                        countFiles++;
                        System.Threading.Thread.Sleep(1);

                        if (string.Compare(fi.Extension, ".cs", true) == 0)
                        {
                            using (StreamReader sr = fi.OpenText())
                            {
                                string s = "";
                                while ((s = sr.ReadLine()) != null)
                                {
                                    if (s.Contains(TextToSearch))
                                    {
                                        counter++;
                                        findLines.Add(s);
                                        result = true;
                                        backgroundWorker1.ReportProgress(0, fi.FullName);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return findLines;
        }

        private void CountFiles(DirectoryInfo di, List<FileInfo> l)
        {
            try
            {
                l.AddRange(di.EnumerateFiles());
            }
            catch
            {

            }

            try
            {
                IEnumerable<DirectoryInfo> subDirs = di.EnumerateDirectories();
                if (subDirs.Count() > 0)
                {
                    foreach (DirectoryInfo dir in subDirs)
                        CountFiles(dir, l);
                }
            }
            catch 
            {
                string err = "";
            }
        }

        private bool CheckForAccess(string PathName)
        {
            if (File.Exists(PathName) == true)
                return CheckFileForAccess(PathName);

            if (Directory.Exists(PathName) == true)
                return CheckFolderForAccess(PathName);

            return false;
        }


        private bool CheckFileForAccess(string FileName)
        {
            FileSecurity fs = new FileSecurity(FileName, AccessControlSections.Access);
            if (fs == null)
                return false;

            AuthorizationRuleCollection TheseRules = fs.GetAccessRules(true, true, typeof(NTAccount));
            if (TheseRules == null)
                return false;

            return CheckACL(TheseRules);
        }

        private bool CheckFolderForAccess(string FolderName)
        {
            DirectoryInfo di = new DirectoryInfo(FolderName);
            if (di == null)
                return false;

            DirectorySecurity acl = di.GetAccessControl(AccessControlSections.Access);
            if (acl == null)
                return false;

            AuthorizationRuleCollection TheseRules = acl.GetAccessRules(true, true, typeof(NTAccount));
            if (TheseRules == null)
                return false;

            return CheckACL(TheseRules);
        }

        private bool CheckACL(AuthorizationRuleCollection TheseRules)
        {
            foreach (FileSystemAccessRule ThisRule in TheseRules)
            {
                if ((ThisRule.FileSystemRights & FileSystemRights.Read) == FileSystemRights.Read)
                {
                    if (ThisRule.AccessControlType == AccessControlType.Deny)
                        return false;
                }

            }

            return true;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            FindLines(@"d:\c-sharp", "FileShellExtension");
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
            label2.Text = e.UserState.ToString();
            if (result == true)
            {
                listView1.Items.Add(e.UserState.ToString());
                result = false;
            }
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled == true)
            {

            }
            else if (e.Error != null)
            {

            }
            else
            {

            }
        }
    }
}

이 경우 d : \ c-sharp 디렉터리에서 "FileShellExtension"문자열을 찾고 있으며 예를 들어 form1.cs와 같이 cs로 끝나는 파일에서만

그리고 내가 얻는 유일한 결과는이 프로그램에서 "FileShellExtension"문자열이 여기에 존재하기 때문에 결과로 줄을 찾는 것입니다.

FindLines(@"d:\c-sharp", "FileShellExtension");

다른 프로젝트에서는 다음과 같은 form1에 "FileShellExtension"문자열이 있습니다.

NameSpace FileShellExtension

그러나 그것을 찾지 못했습니다.

이 프로그램에서 발견되는 문자열의 결과를 전달하기 위해 먼저 수행하려는 것은 검색 프로그램이 결과가 아니어야합니다.

둘째, NameSpace FileShellExtension의 일부로 문자열을 찾지 못한 이유는 무엇입니까?

드미트리 비 첸코

현재 FindLines서명을 다음으로 변경하는 것이 좋습니다.

public static IEnumerable<String> FindLines(String dirName, String textToSearch) {
  if (null == dirName)
    throw new ArgumentNullException("dirName");
  else if (null == textToSearch)
    throw new ArgumentNullException("textToSearch");

  //TODO: put a right mask instead of *.txt  
  var files = Directory
    .EnumerateFiles(dirName, "*.txt", SearchOption.AllDirectories)
    .Where(file => true); //TODO: put right condition on file (now all accepted)  

  return files
    .SelectMany(file => File.ReadLines(file))
    .Where(line => line.Contains(textToSearch));
}

그런 다음 (루틴을 디버깅 한 경우) 백그라운드 작업자 또는 기타를 추가하는 동안 결과를 구체화 할 수 있습니다.

public static List<String> FindLinesToList(String dirName, String textToSearch) {
  List<String> result = new List<String>();

  foreach (var item in FindLines(dirName, textToSearch)) {
    backgroundWorker1.ReportProgress(...)
    countFiles++;  

    ...   

    result.Add(item);
  }
}

디버깅이 훨씬 쉽습니다. 예를 들어

var files = Directory
...

으로

var files = new String[@"C:\MyFile.txt"]; 

파일의 검색이 올바른지 테스트하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

단어의 일부를 검색 할 때 grep이 찾지 못하는 이유는 무엇입니까?

분류에서Dev

화재 기지에서 데이터를 검색 할 때 null을 검색하는 이유는 무엇입니까?

분류에서Dev

ASP.Net MVC ScriptBundle : CDN에서 검색 할 때 jQuery 버전을 지정하는 이유는 무엇입니까?

분류에서Dev

Chrome에서 문서 업로드를 검색 할 때 Nautilus가 하위 디렉토리에서 검색하지 않는 이유는 무엇입니까?

분류에서Dev

Chrome에서 문서 업로드를 검색 할 때 Nautilus가 하위 디렉토리에서 검색하지 않는 이유는 무엇입니까?

분류에서Dev

검색하려고 할 때 Chrome에서 Google 홈페이지로 이동하는 이유는 무엇입니까?

분류에서Dev

Chrome 플러그인 Sense를 사용하여 ElasticSearch에서 검색 할 때 예상되는 결과를 얻지 못하는 이유는 무엇입니까?

분류에서Dev

데이터베이스에서 데이터를 검색 할 때 서식을 유지하기 위해 xsl을 편집하는 방법은 무엇입니까?

분류에서Dev

상수가 아닌 포인터에 문자열 리터럴을 할당 할 때 C 컴파일러가 경고하지 않는 이유는 무엇입니까?

분류에서Dev

~에서 실행할 때 명령이 디렉토리를 찾지 못하는 이유는 무엇입니까?

분류에서Dev

PC를 시작할 때 앱에서 알림을받지 못하는 이유는 무엇입니까?

분류에서Dev

파일을 스캔 할 때 scanf (c Linux vi)에서 올바른 char 값을 얻지 못하는 이유는 무엇입니까?

분류에서Dev

파일에서 문자열을 검색하는 방법은 무엇입니까?

분류에서Dev

내 sed 검색이 필드에서 알파를 찾지 못하는 이유는 무엇입니까?

분류에서Dev

정규식이 정상일 때 preg_match가 태그 사이의 문자열을 찾지 못하는 이유는 무엇입니까?

분류에서Dev

Apache에서 DLL 파일을 검색 할 폴더를 지정하는 방법은 무엇입니까?

분류에서Dev

로드 문자열을 사용할 때 NullPointerException이 발생하지만 일반 문자열이 아닌 이유는 무엇입니까? (가공)

분류에서Dev

답을 인쇄하려고 할 때 색인이 서로 평행하지 않은 이유는 무엇입니까?

분류에서Dev

Spark에서 잘못된 시간대 문자열을 전달할 때 from_utc_timstamp가 오류를 발생시키지 않는 이유는 무엇입니까?

분류에서Dev

파일에서 문자열을 검색하고 찾은 줄과 다음 줄을 다른 파일에 복사하는 방법은 무엇입니까?

분류에서Dev

strstr이 링 버퍼에서 하위 문자열을 찾지 못하는 이유는 무엇입니까?

분류에서Dev

* nix 시스템에서 stdout / stderr를 파이핑 할 때 색상이 표시되지 않는 (제어 문자) 이유는 무엇입니까?

분류에서Dev

내 코드가 배열에있는 특정 문자열을 찾지 못하는 이유는 무엇입니까?

분류에서Dev

PHP의 검색 문자열 집합에서 인기있는 검색을 찾는 방법은 무엇입니까?

분류에서Dev

중포 기지에서 데이터를 검색 할 때 정지 응용 프로그램을 일으키는 원인이되는 오류가 무엇입니까?

분류에서Dev

"for letter in line"은 작동하지만 "word = line.strip ()"이면 "for letter in word"가 작동하지 않는 이유는 무엇입니까? ** 파일에서 ** 문자열 검색 **

분류에서Dev

동일한 볼륨 내에서 파일을 이동할 때 파일 권한이 유지되는 이유는 무엇입니까?

분류에서Dev

문자열이 리소스에있을 때 String.Format이 문자를 이스케이프하지 못하는 이유는 무엇입니까?

분류에서Dev

일치하지 않는 데이터를 구문 분석 할 때 헤더 행을 "검색"하는 가장 좋은 방법은 무엇입니까?

Related 관련 기사

  1. 1

    단어의 일부를 검색 할 때 grep이 찾지 못하는 이유는 무엇입니까?

  2. 2

    화재 기지에서 데이터를 검색 할 때 null을 검색하는 이유는 무엇입니까?

  3. 3

    ASP.Net MVC ScriptBundle : CDN에서 검색 할 때 jQuery 버전을 지정하는 이유는 무엇입니까?

  4. 4

    Chrome에서 문서 업로드를 검색 할 때 Nautilus가 하위 디렉토리에서 검색하지 않는 이유는 무엇입니까?

  5. 5

    Chrome에서 문서 업로드를 검색 할 때 Nautilus가 하위 디렉토리에서 검색하지 않는 이유는 무엇입니까?

  6. 6

    검색하려고 할 때 Chrome에서 Google 홈페이지로 이동하는 이유는 무엇입니까?

  7. 7

    Chrome 플러그인 Sense를 사용하여 ElasticSearch에서 검색 할 때 예상되는 결과를 얻지 못하는 이유는 무엇입니까?

  8. 8

    데이터베이스에서 데이터를 검색 할 때 서식을 유지하기 위해 xsl을 편집하는 방법은 무엇입니까?

  9. 9

    상수가 아닌 포인터에 문자열 리터럴을 할당 할 때 C 컴파일러가 경고하지 않는 이유는 무엇입니까?

  10. 10

    ~에서 실행할 때 명령이 디렉토리를 찾지 못하는 이유는 무엇입니까?

  11. 11

    PC를 시작할 때 앱에서 알림을받지 못하는 이유는 무엇입니까?

  12. 12

    파일을 스캔 할 때 scanf (c Linux vi)에서 올바른 char 값을 얻지 못하는 이유는 무엇입니까?

  13. 13

    파일에서 문자열을 검색하는 방법은 무엇입니까?

  14. 14

    내 sed 검색이 필드에서 알파를 찾지 못하는 이유는 무엇입니까?

  15. 15

    정규식이 정상일 때 preg_match가 태그 사이의 문자열을 찾지 못하는 이유는 무엇입니까?

  16. 16

    Apache에서 DLL 파일을 검색 할 폴더를 지정하는 방법은 무엇입니까?

  17. 17

    로드 문자열을 사용할 때 NullPointerException이 발생하지만 일반 문자열이 아닌 이유는 무엇입니까? (가공)

  18. 18

    답을 인쇄하려고 할 때 색인이 서로 평행하지 않은 이유는 무엇입니까?

  19. 19

    Spark에서 잘못된 시간대 문자열을 전달할 때 from_utc_timstamp가 오류를 발생시키지 않는 이유는 무엇입니까?

  20. 20

    파일에서 문자열을 검색하고 찾은 줄과 다음 줄을 다른 파일에 복사하는 방법은 무엇입니까?

  21. 21

    strstr이 링 버퍼에서 하위 문자열을 찾지 못하는 이유는 무엇입니까?

  22. 22

    * nix 시스템에서 stdout / stderr를 파이핑 할 때 색상이 표시되지 않는 (제어 문자) 이유는 무엇입니까?

  23. 23

    내 코드가 배열에있는 특정 문자열을 찾지 못하는 이유는 무엇입니까?

  24. 24

    PHP의 검색 문자열 집합에서 인기있는 검색을 찾는 방법은 무엇입니까?

  25. 25

    중포 기지에서 데이터를 검색 할 때 정지 응용 프로그램을 일으키는 원인이되는 오류가 무엇입니까?

  26. 26

    "for letter in line"은 작동하지만 "word = line.strip ()"이면 "for letter in word"가 작동하지 않는 이유는 무엇입니까? ** 파일에서 ** 문자열 검색 **

  27. 27

    동일한 볼륨 내에서 파일을 이동할 때 파일 권한이 유지되는 이유는 무엇입니까?

  28. 28

    문자열이 리소스에있을 때 String.Format이 문자를 이스케이프하지 못하는 이유는 무엇입니까?

  29. 29

    일치하지 않는 데이터를 구문 분석 할 때 헤더 행을 "검색"하는 가장 좋은 방법은 무엇입니까?

뜨겁다태그

보관