web-dev-qa-db-ja.com

C#コンソールの最後のアイテムをクリアして新しいものを置き換えますか?コンソールアニメーション

次のCSharpコード(サンプルのみ):

Console.WriteLine("Searching file in...");

foreach(var dir in DirList)
{
    Console.WriteLine(dir);
}

出力を次のように出力します:

Searching file in...

dir1

dir2

dir3

dir4

.

.

.

質問?出力を次のように取得するにはどうすればよいですか?

Searching file in...

dir1  

(次に、dir1をクリアし、dir2を出力します)次のすべてのディレクトリ名は、前のディレクトリを置き換えます

17
PawanS

問題がコンソールのクリアである場合は、メソッドConsole.Clear();を使用します。そうでない場合は、これを使用して最後の行を上書きします。

Console.WriteLine("Searching file in...");
        foreach(var dir in DirList)
         {
           Console.SetCursorPosition(1,0);
           Console.WriteLine(dir);
         }
15
The GiG

使用する - Console.SetCursorPosition カーソルを最後の行の先頭に置き、書き直します。

何かのようなもの:

Console.WriteLine(dir);
Console.SetCursorPosition(0, Console.CursorTop - 1);

編集:

あなたのコメントによると、あなたは次のようにすることができます:

Console.WriteLine("Searching file in...");
foreach (var dir in DirList)
{
    ClearCurrentConsoleLine();
    Console.Write(dir);
}

ClearCurrentConsoleLineは次のように定義されています。

public static void ClearCurrentConsoleLine()
{
    int currentLineCursor = Console.CursorTop;
    Console.SetCursorPosition(0, Console.CursorTop);
    for (int i = 0; i < Console.WindowWidth; i++)
        Console.Write(" ");
    Console.SetCursorPosition(0, currentLineCursor);
}
25
digEmAll

「\ r」を使用して印刷できます。そうすれば、カーソルが行をジャンプせず、書き直すことができます。

foreach(var dir in DirList)
     {
       Console.Write("\r{0}%           ",dir);
     }

番号の後にスペースを使用してすべてが消去されていることを確認し、「\ n」を追加したくないため、WriteLineの代わりに.Writeを使用します

10
David Pires

Console.CursorLeftプロパティとConsole.CursorTopプロパティの値を保存して、カーソルの現在の位置を追跡するだけです。次に、書き込み、リセット、繰り返しを行います。むしろこの場合、リセットし、書き込み、そして繰り返します。

Console.WriteLine("Searching file in...");

// save the current cursor position
var cursorLeft = Console.CursorLeft;
var cursorTop = Console.CursorTop;

// build a format string to establish the maximum width do display
var maxWidth = 60;
var fmt = String.Format("{{0,-{0}}}", maxWidth);

foreach (var dir in dirList)
{
    // restore the cursor position
    Console.SetCursorPosition(cursorLeft, cursorTop);

    // trim the name if necessary
    var name = Path.GetFileName(dir);
    if (name.Length > maxWidth)
        name = name.Substring(0, maxWidth);

    // write the trimmed name
    Console.Write(fmt, name);

    // do some work
}
Console.WriteLine(); // end the previous line
6
Jeff Mercado

これはかなり古い投稿ですが、私のアプローチを投稿します。多分これは誰かを助けるでしょう

Console.SetCursorPosition(0, Console.CursorTop);
Console.Write(new String(' ', Console.WindowWidth));
Console.SetCursorPosition(0, Console.CursorTop);
Console.Write(dir);
3
Alpay

私はこれがあなたが望むものだと思います;)

Console.WriteLine("Searching file in...");
    foreach(var dir in DirList)
     {
       Console.Write(\"r" + dir);
     }
2
user3770256

これは私がしていることをします考えるあなたが求めていること:

string s = "\r";
s += new string(' ', Console.CursorLeft);
s += "\r";
Console.Write(s);

提案された@digEmAllと基本的に同じですが、Console.WindowWidthの代わりに実際の文字数を使用します

1
dlchambers