19

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

4

7 回答 7

27

用于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);
}
于 2011-02-17T09:55:50.827 回答
17

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

Console.WriteLine("Searching file in...");
        foreach(var dir in DirList)
         {
           Console.SetCursorPosition(1,0);
           Console.WriteLine(dir);
         }
于 2011-02-17T09:54:11.953 回答
12

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

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

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

于 2011-02-17T10:09:54.520 回答
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
于 2011-02-17T10:00:13.317 回答
3

虽然这是一个很老的帖子,但我会发布我的方法。也许这会对某人有所帮助

Console.SetCursorPosition(0, Console.CursorTop);
Console.Write(new String(' ', Console.WindowWidth));
Console.SetCursorPosition(0, Console.CursorTop);
Console.Write(dir);
于 2013-02-21T13:01:08.090 回答
2

我想这就是你想要的;)

Console.WriteLine("Searching file in...");
    foreach(var dir in DirList)
     {
       Console.Write(\"r" + dir);
     }
于 2014-06-24T08:14:12.897 回答
1

这将做我认为你所要求的:

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

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

于 2011-09-24T02:22:33.303 回答