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

C# 如何扫描文件夹和子文件夹中的所有文件?,c#,C#,可能重复: 如何扫描文件夹和子文件夹中的所有文件 以下是我的代码: private void button1_Click(object sender, EventArgs e) { folderBrowserDialog1.ShowDialog(); label2.Text = folderBrowserDialog1.SelectedPath; viruses = 0; progressBar1.Value = 0; label1.Text+= vir

可能重复:

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

以下是我的代码:

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)
        {
        }
    }
}
private void按钮1\u单击(对象发送者,事件参数e)
{
folderBrowserDialog1.ShowDialog();
label2.Text=folderBrowserDialog1.SelectedPath;
病毒=0;
progressBar1.值=0;
label1.Text+=virus.ToString();
listBox1.Items.Clear();
}
私有void btnScan\u Click\u 1(对象发送方,事件参数e)
{
列表搜索=Directory.GetFiles(folderBrowserDialog1.SelectedPath,“**”).ToList();
progressBar1.Maximum=search.Count;
//foreach(Directory.GetDirectories.search))
foreach(搜索中的字符串项)
{
尝试
{
StreamReader stream=新的StreamReader(项目);
string read=stream.ReadToEnd();
foreach(viruslist中的字符串st)
{
if(Regex.IsMatch(read,st));
{
病毒+=1;
label1.Text+=listBox1.Items.Count;
列表框1.Items.Add(item);
}
1.增量(1);
}
}
捕获(例外情况除外)
{
}
}
}

此代码仅扫描根文件夹中的所有文件,但不扫描子文件夹中的所有文件。如何更改此代码,使其也可以扫描文件夹和子文件夹中的所有文件

传递
SearchOption.AllDirectories
GetFiles()
传递
SearchOption.AllDirectories
GetFiles()
请查看此处的
搜索选项


这使您能够执行以下操作:
Directory.GetFiles(folderBrowserDialog1.SelectedPath,“**”,SearchOption.AllDirectories)

请查看此处的
搜索选项


这使您能够执行以下操作:
Directory.GetFiles(folderBrowserDialog1.SelectedPath,“**”,SearchOption.AllDirectories)

因为您使用的是目录类,所以只需在调用GetFiles时使用SearchOption参数,如下所示:

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

由于您使用的是Directory类,因此只需在调用GetFiles时使用SearchOption参数,如下所示:

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

在方法目录.GetFiles(…)中,可以提供枚举值作为第三个参数。这里的默认目录只是顶部目录。可以说,要在method Directory.GetFiles(…)的所有子目录中搜索,可以提供一个枚举值作为第三个参数。这里的默认目录只是顶部目录。您可以说在所有子目录中搜索

请注意System.IO.File/Directory不处理长路径-您可以尝试使用开源库。如果你不想重新发明轮子,你可以使用一些商业工具;appliedalgo.com-使用正则表达式逐个清理文件是一项计算量非常大的任务!请注意,System.IO.File/Directory不处理长路径-您可以尝试使用开源库。如果你不想重新发明轮子,你可以使用一些商业工具;appliedalgo.com-使用正则表达式逐个清理文件是一项计算量非常大的任务!