4

我正在开发一个处理文件上传的 CLI 应用程序,并希望结合附加和覆盖的输出。理想情况下,它看起来像这样:

c:\>upload
file1.dat       100%
file2.dat       100%
file3.dat        59%, 36.4k/s

我只想在最后一行定期更新完成百分比和当前速度。我知道我可以使用 SetCursorPosition 将输出写入控制台的任何部分,但似乎没有 GetCursorPosition 并且最近打印的文件名的绝对位置会有所不同。我也想知道这一切将如何影响重定向输出,但正确处理对这个应用程序来说并不重要。

编辑:看起来 Console.CursorLeft / Console.CursorTop 等会给我当前的光标位置。我也看着他们!那好吧。如果有人想要,免费接受答案。

4

4 回答 4

3

您是否考虑过使用 Console.CursorLeft / Console.CursorTop 来获取当前光标位置 ;-)

于 2009-07-02T21:41:03.353 回答
1

这很简单。\r 字符将光标移动到当前行的开头。

for(int i = 0; i <= 100; i++)
{
   printf("Progress: %02d \r", i);
   fflush(stdout);
   Sleep(200);
}

printf("\n");
于 2009-11-30T19:53:54.030 回答
0

这不是平台限制;我知道 curses 是做这类事情的好工具,并且在 Windows 上有一个版本。(Nethack 是您需要的那种控制的一个很好的例子,而且 Windows 控制台版本作为奖励非常有趣。)不过,我不知道在 .NET 上是否有这种级别的控制。也许在curses的托管代码中编译可能会做你想要的?

于 2009-07-02T21:29:07.963 回答
0

来自旧 DOS 时代的最简单的解决方案是将足够的退格 (\b) 写入控制台以清除最后一个百分比输出,然后打印新的。

于 2009-07-02T22:29:44.720 回答