我正在开发一个处理文件上传的CLI应用程序,并希望有一个附加和覆盖输出的组合。理想情况下,它看起来像这样:
c:\>upload
file1.dat 100%
file2.dat 100%
file3.dat 59%, 36.4k/s
我想最后一行定期更新完成百分比和当前速度。我知道我可以使用SetCursorPosition将输出写入控制台的任何部分,但看起来没有GetCursorPosition,并且最近打印的文件名的绝对位置会有所不同。我也想知道这一切会如何影响重定向输出,但正确处理这个应用并不重要。
编辑:看起来Console.CursorLeft / Console.CursorTop等会给我当前的光标位置。我也看着他们!那好吧。如果有人想要,可以免费接受答案。
答案 0 :(得分:3)
您是否考虑使用Console.CursorLeft / Console.CursorTop获取当前光标位置;-)
答案 1 :(得分:1)
这很简单。 \ r \ n字符将光标移动到当前行的开头。
for(int i = 0; i <= 100; i++)
{
printf("Progress: %02d \r", i);
fflush(stdout);
Sleep(200);
}
printf("\n");
答案 2 :(得分:0)
这不是平台限制;我知道curses是做这类东西的好工具,而且Windows上有一个版本。 (Nethack是你需要的那种控件的一个很好的例子,Windows控制台版本作为奖励非常有趣。)我不知道是否有任何关于.NET的控制级别。也许在curses的托管代码中编译可能会做你想要的?
答案 3 :(得分:0)
来自旧DOS时代的最简单的解决方案是将足够的退格(\ b)写入控制台以清除最后的百分比输出,然后打印新的输出。