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

Paw*_*anS 17 c# console.writeline

以下CSharp代码(仅示例):

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

foreach(var dir in DirList)
{
    Console.WriteLine(dir);
}
Run Code Online (Sandbox Code Playgroud)

打印输出为:

Searching file in...

dir1

dir2

dir3

dir4

.

.

.
Run Code Online (Sandbox Code Playgroud)

题? 我怎样才能得到输出

Searching file in...

dir1  
Run Code Online (Sandbox Code Playgroud)

(然后清除dir1并打印dir2等等)所有下一个目录名称wiil将替换之前的目录

dig*_*All 25

用于Console.SetCursorPosition将光标设置在最后一行的开头并重写它.

就像是:

Console.WriteLine(dir);
Console.SetCursorPosition(0, Console.CursorTop - 1);
Run Code Online (Sandbox Code Playgroud)

编辑:

根据您的评论,您可以执行以下操作:

Console.WriteLine("Searching file in...");
foreach (var dir in DirList)
{
    ClearCurrentConsoleLine();
    Console.Write(dir);
}
Run Code Online (Sandbox Code Playgroud)

随着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);
}
Run Code Online (Sandbox Code Playgroud)


The*_*GiG 15

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

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

  • 我不想清除所有控制台.只是最后一条印刷线 (2认同)

Dav*_*res 10

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

foreach(var dir in DirList)
     {
       Console.Write("\r{0}%           ",dir);
     }
Run Code Online (Sandbox Code Playgroud)

使用空格数后,以确保一切被删除,而不是使用的WriteLine .WRITE因为你不想加入"\n"


Jef*_*ado 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
Run Code Online (Sandbox Code Playgroud)