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

4

我正在开发一个命令行应用程序,涉及文件上传,并希望具有附加和覆盖输出的组合。理想情况下,它应该类似于这样:

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

我希望只有最后一行会定期更新完成百分比和当前速度。我知道可以使用SetCursorPosition将输出写入控制台的任何部分,但似乎没有GetCursorPosition,并且最近打印的文件名的绝对位置会有所变化。我还想知道所有这些对重定向输出的影响,但正确处理对此应用程序不是关键。
编辑:看起来Console.CursorLeft / Console.CursorTop等将给我当前光标位置。我也看了它们!噢好吧。如果有人想要它,那么免费接受答案。

请自己发布答案并将其标记为已接受。如果没有其他的东西,我认为可能会有一个徽章可以收集... - Fredrik Mörk
我上次查看时,只有在48小时后才能进行自我接受。这个情况改变了吗? - Luke
4个回答

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

1

这很容易做到。 \r 字符将光标移动到当前行的开头。

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

printf("\n");

0

这不是平台限制的问题;我知道curses是一个很好的工具,可以做这种事情,而且Windows上也有一个版本。(Nethack是你需要的控制的绝佳例子,而Windows控制台版本作为额外奖励非常有趣。)但我不知道.NET是否有任何能够达到这种控制水平的东西。也许在托管代码中编译curses可以实现你想要的效果?


0

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


(\r)会将光标移回到行首。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接