关于console.writeline:C#clear Console最后一项并替换新的?

C# clear Console last Item and replace new? Console Animation

以下CSharp代码(仅示例):

1
2
3
4
5
6
Console.WriteLine("Searching file in...");

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

输出打印为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Searching file in...

dir1

dir2

dir3

dir4

.

.

.

有问题吗?我怎样才能得到输出

1
2
3
Searching file in...

dir1

(then clear dir1 and print dir2 and so on)All next dir name wiil replace the previous dir


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

比如:

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

编辑:

根据您的意见,您可以执行以下操作:

1
2
3
4
5
6
Console.WriteLine("Searching file in...");
foreach (var dir in DirList)
{
    ClearCurrentConsoleLine();
    Console.Write(dir);
}

其中ClearCurrentConsoleLine定义为:

1
2
3
4
5
6
7
8
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);
}


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

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


你可以用"r"打印,这样光标就不会跳一行,你可以重写它。

1
2
3
4
5
foreach(var dir in DirList)
     {
       Console.Write("
{0}%          "
,dir);
     }

在数字后使用空格确保所有内容都被删除,并使用.write而不是writeline因为您不想添加""


只需保存Console.CursorLeftConsole.CursorTop属性的值,就可以跟踪光标的当前位置。然后写入、重置和重复。或者在这种情况下,重置、写入和重复。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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


虽然这是一个相当古老的职位,我会张贴我的方法。也许这能帮助别人

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

我想这就是你想要的;)

1
2
3
4
5
Console.WriteLine("Searching file in...");
    foreach(var dir in DirList)
     {
       Console.Write("r" + dir);
     }


我认为这会满足你的要求:

1
2
3
4
5
6
string s ="
"
;
s += new string(' ', Console.CursorLeft);
s +="
"
;
Console.Write(s);

基本上与@digemall建议的相同,但它使用实际的字符而不是console.windowwidth