0

我正在编写一个搜索文件的递归方法,当它遇到匹配时,它会打印到控制台窗口的完整路径。显然,如果这会返回很多结果,它会很快填满屏幕,没有足够的时间来查看结果。我想要一种在控制台的CursorLeft属性到达某个位置以插入ReadKey()以允许查看结果时捕获的方法。我的搜索方法如下

static void FileSearch(string Base, string Pattern)
{
    if (!Directory.Exists(Base)) return;

    string _Patt = Pattern.ToLower();

    var Files = Directory.GetFiles(Base).Where(File 
        => Path.GetFileName(File).ToLower().Contains(_Patt));

    foreach (string File in Files)
        Console.WriteLine(File);

    string[] Dirs = Directory.GetDirectories(Base);

    foreach (string Dir in Dirs)
        FileSearch(Dir, Pattern);
}

我知道我可以添加某种索引器,例如递增int,以跟踪位置并在循环的每次迭代中检查它,并且int可以将其作为 a 传递,ref以便所有调用都查看相同的int. 我也知道每次迭代我都可以简单地检查当前位置。我只是想知道是否会有一种更清洁的方法来实现这一点,也许类似于事件处理?

4

1 回答 1

1

我认为这Console.CursorTop是正确的财产。打印每一行后检查以下内容:

if (Console.CursorTop % (Console.WindowHeight - 1) == 0)
    Console.ReadKey();

如:

static void FileSearch(string Base, string Pattern)
{
    if (!Directory.Exists(Base)) return;

    string _Patt = Pattern.ToLower();

    var Files = Directory.GetFiles(Base).Where(File 
        => Path.GetFileName(File).ToLower().Contains(_Patt));

    foreach (string File in Files)
    {
        Console.WriteLine(File);
        if (Console.CursorTop % (Console.WindowHeight - 1) == 0)
            Console.ReadKey();
    }

    string[] Dirs = Directory.GetDirectories(Base);

    foreach (string Dir in Dirs)
        FileSearch(Dir, Pattern);
}
于 2013-02-01T02:00:45.647 回答