console.write(“ \ r”)在服务器的同一行中不显示元素

时间:2018-12-18 21:27:55

标签: c#

我试图循环打印目录数,并希望将输出显示在同一行中,但值会更改。我使用下面的代码在本地系统上运行良好,但是当我在Windows Server 2012 R2上运行相同的代码时,每个目录在单独的行中显示。

Console.Write("\r[ {0} Directories scan complete ] [ {1} files scan complete ] [ Percentage completed {2}% ]", directoryCount.ToString(), fileCount.ToString(), percentage.ToString());

本地计算机输出:

enter image description here

服务器输出:

[ 1 Directories complete ] [ 10 files scan complete ] [ Percentage completed 1% ]
[ 2 Directories complete ] [ 26 files scan complete ] [ Percentage completed 2% ]
[ 3 Directories complete ] [ 39 files scan complete ] [ Percentage completed 3% ]

请在这里建议我做错了什么?

2 个答案:

答案 0 :(得分:2)

与其依靠\r,不如在要输出的行上捕获Console.CursorTop,然后使用Console.SetCursorPosition将光标设置到该行的开头,可能会更好。在输出结果之前,每行:

例如:

static void Main()
{
    // Capture the current line number
    var lineNo = Console.CursorTop;

    int i = 1;
    while (true)
    {
        // Set the cursor position before outputting our progress
        Console.SetCursorPosition(0, lineNo);
        Console.Write($"Iterations performed: {i++}");
    }
}  

答案 1 :(得分:1)

您可以使用以下内容。 \ r将光标返回到当前行的开头。因此,您可以使用-3左对齐新输入。

Console.Write("\r[ {0, -3} Directories scan complete ] [ {1, -3} files scan complete ] [ Percentage completed {2, -3}% ]", directoryCount.ToString(), fileCount.ToString(), percentage.ToString());

或者您可以尝试StringBuilder.Append,然后写到控制台。

sb.Append('\r') 

或更易读:

const char LF = '\r';
sb.Append(data); // your current data
sb.Append (LF);