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

3
可能是重复问题:如何在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)
        {
        }
    }
}

这段代码只扫描根文件夹内的所有文件,但不包括子文件夹。如何更改此代码以便可以扫描文件夹和其子文件夹中的所有文件?


1
请注意,System.IO.File/Directory不处理长路径 - 您可以尝试使用开源库http://zetalongpaths.codeplex.com/。如果您不想重复造轮子,还有一些商业工具可供使用;appliedalgo.com - - Swab.Jat
1
使用正则表达式逐个扫描文件是非常计算密集的任务! - user3133287
4个回答

7

由于您正在使用Directory类,因此只需在调用GetFiles时使用SearchOption参数即可:

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

Link to MSDN


0

SearchOption.AllDirectories传递给GetFiles()


0

0
在 Directory.GetFiles(...) 方法中,你可以提供一个枚举值作为第三个参数。默认情况下,它只会搜索顶级目录。你可以指定搜索所有子目录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接