在.Net CLI应用程序中显示完成百分比的最佳方法是什么?

时间:2009-07-02 21:25:14

标签: .net windows command-line-interface

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

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

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

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

4 个答案:

答案 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)写入控制台以清除最后的百分比输出,然后打印新的输出。