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として渡して、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 に答える