C#clear Console最后一项并替换新的?控制台动画

时间:2011-02-17 09:49:47

标签: c# console.writeline

以下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等等)所有下一个目录名称wiil替换上一个目录

7 个答案:

答案 0 :(得分:22)

使用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);
}

答案 1 :(得分:12)

如果您的问题是清除控制台,请使用方法Console.Clear();,如果不是,请使用此方法覆盖最后一行;

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

答案 2 :(得分:10)

您可以使用“\ r”打印,这样光标不会跳过一行,您可以重写它。

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

在数字后面使用空格以确保删除所有内容,并使用.Write而不是WriteLine 因为你不想添加“\ n”

答案 3 :(得分:6)

只需保存Console.CursorLeftConsole.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

答案 4 :(得分:3)

虽然这是一篇相当古老的帖子,但我会发布我的方法。也许这会帮助某人

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

答案 5 :(得分:2)

我认为这就是你想要的;)

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

答案 6 :(得分:1)

这将完成您所要求的想法

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

与@digEmAll建议基本相同,但它使用的是实际的#chars而不是Console.WindowWidth