2016-03-03 55 views
0

我在* .cs文件的目錄中搜索特定的字符串。 如果我將它添加到列表視圖中。 但是,當它將結果添加到列表視圖我沒有看到CS文件名字符串被發現,但其他東西。爲什麼添加到列表視圖項目時,結果不是文件名?

在BackgroundWorker的DoWork的事件

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
     { 
      FindLines(@"d:\c-sharp", "simplecontextmenu");//"string s1 = treeView1.SelectedNode.Tag as string;"); 
     } 

這是FindLines代碼

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, s); 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
      return findLines; 
     } 

這是BackgroundWorker的progresschanged事件

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

一些與在FindLines方法ReportProgress並在progresschanged事件中使用e.UserState是錯的。我沒有得到在列表視圖中找到字符串的cs文件的路徑和名稱。

我在這個目錄中搜索字符串「simplecontextmenu」,如果字符串在目錄中的任何一個cs文件中,我想添加到listview中的文件名字符串在該目錄中找到例如,如果串在test.cs中找到,那麼在列表視圖告訴我:

C:\ mytest的\ test.cs中「simplecontextmenu」

但我得到的卻是該行自它從代碼是什麼我在listview中看到的是:FindLines(@「d:\ c-sharp」,「simplecontextmenu」); //「string s1 = treeView1.SelectedNode.Tag as string;」);

回答

1

您要舉報的backgroundWorker1.ReportProgress(0, s);匹配的行s。您應該報告文件名:

backgroundWorker1.ReportProgress(0, fi.FullName);

相關問題