Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在获取目录和文件时会递归它';s正在添加到列表中<;字符串>;只有目录而不是文件?_C#_.net_Winforms - Fatal编程技术网

C# 为什么在获取目录和文件时会递归它';s正在添加到列表中<;字符串>;只有目录而不是文件?

C# 为什么在获取目录和文件时会递归它';s正在添加到列表中<;字符串>;只有目录而不是文件?,c#,.net,winforms,C#,.net,Winforms,嫁妆活动 DirSearch(textBox3.Text, textBox2.Text, textBox1.Text, worker, e); textbox3 text包含根目录。textbox2 text conta在本例中是要搜索的扩展名CS,textbox1 text包含每个文件中要搜索的文本 DirSearch方法 void DirSearch(string rootDirectory, string filesExtension, string textToSearch, Back

嫁妆活动

DirSearch(textBox3.Text, textBox2.Text, textBox1.Text, worker, e);
textbox3 text包含根目录。textbox2 text conta在本例中是要搜索的扩展名CS,textbox1 text包含每个文件中要搜索的文本

DirSearch方法

void DirSearch(string rootDirectory, string filesExtension, string textToSearch, BackgroundWorker worker, DoWorkEventArgs e)
        {
            List<string> filePathList = new List<string>();
            List<string> restrictedFiles = new List<string>();
            int overallfiles = 0;
            int numberoffiles = 0;
            int numberofdirs = 0;

            try
            {
                filePathList = SearchAccessibleFilesNoDistinct(rootDirectory, null).ToList();
            }
            catch (Exception err)
            {
                string ad = err.ToString();
            }
            foreach (string file in filePathList)
            {
                try
                {
                    _busy.WaitOne();
                    if (worker.CancellationPending == true)
                    {
                        e.Cancel = true;
                        return;
                    }
                    List<MyProgress> prog = new List<MyProgress>();
                    int var = File.ReadAllText(file).Contains(textToSearch) ? 1 : 0;

                    overallfiles++;
                    if (var == 1)
                    {
                        numberoffiles++;
                        prog.Add(new MyProgress { Report1 = file, Report2 = numberoffiles.ToString() });
                        backgroundWorker1.ReportProgress(0, prog);
                    }
                    numberofdirs++;
                    label1.Invoke((MethodInvoker)delegate
                    {
                        label1.Text = numberofdirs.ToString();
                        label1.Visible = true;
                    });
                }
                catch (Exception)
                {
                    restrictedFiles.Add(file);
                    continue;
                }
            }

        }
如果我移除该部件:

&& ext == textBox2.Text
因此,如果:

如果(!files.Contains(文件))

然后它会工作,它会将所有文件添加到列表文件中。 但一旦我添加了这个扩展名,它只会将目录添加到文件中。而不是文件

不确定整个方法searchAccessibleFileNoDistinct使用递归的某些东西工作不正常

在方法顶部使用断点时,我看到根目录为root=“d:\C-Sharp”,列表为空


然后它应该开始整个操作。

我认为您可以将它写得更短(在Task.Factory.StartNew中调用它以使其异步),只需快速且脏的示例:

var directory = @"D:\Downloads";
var extension = @"*.txt";
var textToSearch = @"abc";
var files = SearchFiles(directory, extension, SearchOption.AllDirectories);
...
private static List<string> SearchFiles(string directory, string extension, string textToSearch)
{
  var results = new List<string>();
  var files = Directory.GetFiles(directory, extension, SearchOption.AllDirectories);
  foreach (var file in files)
  {
    var content = File.ReadAllText(file);
    if (content.Contains(textToSearch))
    {
      results.Add(file);
    }
  }
  return results;
}
var目录=@“D:\Downloads”;
变量扩展=@“*.txt”;
var textToSearch=@“abc”;
var files=SearchFiles(目录、扩展名、SearchOption.AllDirectories);
...
私有静态列表搜索文件(字符串目录、字符串扩展名、字符串文本搜索)
{
var results=新列表();
var files=Directory.GetFiles(目录、扩展名、SearchOption.AllDirectories);
foreach(文件中的var文件)
{
var content=File.ReadAllText(文件);
if(content.Contains(textToSearch))
{
结果.添加(文件);
}
}
返回结果;
}
textBox2.Text的值为
cs
(小写字母)


您使用方法获得了文件的扩展名。该方法返回指定路径的扩展名,包括句点“”。因此,您应该在文本框中键入
.cs

文本框2.text的值是多少?当然
字符串ext=Path.GetExtension(文件)将不等于
d:\\C-Sharp
。该方法返回文件的扩展名。textBox2.Text的值为cs(小写字母)textBox2.Text包含扩展名。textbox3.Text包含根目录d:\\C-Sharp@RezaAghaei这是我的错误textBox2。文本包含扩展名,在本例中为cs,而textbox3。文本包含根目录,其中为d:\\C-sharpPath.GetExtension方法,返回指定路径的扩展名,包括句点“”。因此,您可以在文本框中键入.cs。
&& ext == textBox2.Text
var directory = @"D:\Downloads";
var extension = @"*.txt";
var textToSearch = @"abc";
var files = SearchFiles(directory, extension, SearchOption.AllDirectories);
...
private static List<string> SearchFiles(string directory, string extension, string textToSearch)
{
  var results = new List<string>();
  var files = Directory.GetFiles(directory, extension, SearchOption.AllDirectories);
  foreach (var file in files)
  {
    var content = File.ReadAllText(file);
    if (content.Contains(textToSearch))
    {
      results.Add(file);
    }
  }
  return results;
}