我试图循环打印目录数,并希望将输出显示在同一行中,但值会更改。我使用下面的代码在本地系统上运行良好,但是当我在Windows Server 2012 R2上运行相同的代码时,每个目录在单独的行中显示。
Console.Write("\r[ {0} Directories scan complete ] [ {1} files scan complete ] [ Percentage completed {2}% ]", directoryCount.ToString(), fileCount.ToString(), percentage.ToString());
本地计算机输出:
服务器输出:
[ 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% ]
请在这里建议我做错了什么?
答案 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);