【问题标题】:What is the best way to display percent complete in a .Net CLI application?在 .Net CLI 应用程序中显示完成百分比的最佳方式是什么?
【发布时间】:2009-07-02 21:25:14
【问题描述】:

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

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

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

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

【问题讨论】:

  • 自己发布答案,标记为已接受。我认为可能有一个徽章可以收集,如果没有别的......
  • 上次我检查它只让你在 48 小时后自我接受。那改变了吗?

标签: .net windows command-line-interface


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • (\r) 会将光标移回行首
        猜你喜欢
        • 2021-05-19
        • 1970-01-01
        • 2010-11-25
        • 2020-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多