4

ファイルのアップロードを処理する CLI アプリケーションに取り組んでおり、追加出力と上書き出力を組み合わせたいと考えています。理想的には、次のようになります。

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

最後の行だけで、完了率と現在の速度を定期的に更新したいと思います。SetCursorPosition を使用してコンソールの任意の部分に出力を書き込むことができることはわかっていますが、GetCursorPosition がなく、最後に出力されたファイル名の絶対位置が異なるようです。また、これらすべてがリダイレクトされた出力にどのように影響するのかも気になりますが、それを正しく処理することは、このアプリにとって重要ではありません。

EDIT : Console.CursorLeft / Console.CursorTop などで現在のカーソル位置がわかるように見えます。私もemを見ました!しかたがない。誰かがそれを望むなら、無料で受け入れられた答え。

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

古い DOS 時代からの最も簡単な解決策は、コンソールに十分なバックスペース (\b) を書き込んで最後のパーセント出力をクリアしてから、新しいパーセント出力を出力することです。

于 2009-07-02T22:29:44.720 に答える
0

これはプラットフォームの制限ではありません。curses がまさにこの種のことを行うための優れたツールであることは知っています。また、Windows 用のバージョンもあります。(Nethack はまさに必要な制御の好例であり、Windows コンソール バージョンはおまけとして非常に面白いものです。) ただし、.NET でそのレベルの制御が可能かどうかはわかりません。おそらく、curses の管理されたコードでのコンパイルは、あなたが望むことをするでしょうか?

于 2009-07-02T21:29:07.963 に答える