【问题标题】:How To Scan All File in Folder and Subfolder? [duplicate]如何扫描文件夹和子文件夹中的所有文件? [复制]
【发布时间】:2012-07-15 07:56:35
【问题描述】:

可能重复:
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)
        {
        }
    }
}

此代码仅扫描根文件夹中的所有文件,而不扫描子文件夹中的所有文件。如何更改此代码以便它也可以扫描文件夹和子文件夹中的所有文件?

【问题讨论】:

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

标签: c#


【解决方案1】:

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

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

Link to MSDN

【讨论】:

    【解决方案2】:

    SearchOption.AllDirectories 传递给GetFiles()

    【讨论】:

      【解决方案3】:

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

      这使您能够做到:Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.*",SearchOption.AllDirectories);

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2012-07-15
          • 2016-12-30
          • 1970-01-01
          • 1970-01-01
          • 2014-07-22
          • 2010-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多