如何扫描文件夹和子文件夹中的所有文件?

问题描述:

可能重复:
How to recursively list all the files in a directory in C#?如何扫描文件夹和子文件夹中的所有文件?

如何扫描文件夹和子文件全部?

这里是我的代码:

private void button1_Click(object sender, EventArgs e) 
{ 
    folderBrowserDialog1.ShowDialog(); 
    label2.Text = folderBrowserDialog1.SelectedPath; 
    viruses = 0; 
    progressBar1.Value = 0; 
    label1.Text+= viruses.ToString(); 
    listBox1.Items.Clear(); 
} 

private void btnScan_Click_1(object sender, EventArgs e) 
{ 

    List<string> search = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.*").ToList(); 
    progressBar1.Maximum = search.Count; 
    //foreach (Directory.GetDirectories.search)) 

    foreach(string item in search) 
    { 
     try 
     { 
      StreamReader stream = new StreamReader(item); 
      string read = stream.ReadToEnd(); 
      foreach(string st in viruslist) 
      { 
       if(Regex.IsMatch(read,st)); 
       { 
        viruses+=1; 
        label1.Text+= listBox1.Items.Count; 
        listBox1.Items.Add(item); 
       } 
       progressBar1.Increment(1); 
      } 
     } 
     catch(Exception ex) 
     { 
     } 
    } 
} 

此代码scaning只,但不是在子文件夹的根文件夹中的所有文件。如何更改此代码,以便它可以扫描文件夹和子文件夹中的所有文件?

+1

请注意System.IO.File/Directory不处理长路径 - 您可以尝试开源库http://zetalongpaths.codeplex.com/。如果你不想重新发明*,你可以使用商业工具; appliedninggo.com - – 2014-01-02 08:12:43

+1

使用正则表达式的文件Sanning文件是一个非常计算密集型任务! – 2014-01-02 08:23:28

由于您使用Directory类,只需使用SearchOption参数上您来电的GetFiles像这样:

Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.*",SearchOption.AllDirectories).ToList(); 

Link to MSDN

+0

谢谢你的回答... – mapix 2012-07-17 00:41:04

通过SearchOption.AllDirectoriesGetFiles()

+0

谢谢你的回答... – mapix 2012-07-17 00:40:43

请大家看看SearchOption这里http://msdn.microsoft.com/en-us/library/ms143448.aspx

,让您做到:Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.*",SearchOption.AllDirectories);

+0

谢谢你的回答... – mapix 2012-07-17 00:41:35

在该方法中Directory.GetFiles(......),你可以provi将枚举值作为第三参数。这里的默认值只是*目录。您可以说要在所有子目录中搜索