2009-07-02 10 views
4

私は、ファイルのアップロードを扱うCLIアプリケーションで作業しており、追加された出力と上書きされた出力を組み合わせたいと考えています。理想的には次のようになります:.Net CLIアプリケーションで完了パーセントを表示する最適な方法は何ですか?

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

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

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

+0

自分でマークを受け入れてください。私は収集するバッジがあるかもしれないと思います。もしも他のものがなければ... –

+0

最後に私はそれをチェックして、48時間後にあなた自身を受け入れるようにしました。その変化はありましたか? – Luke

答えて

3

コンソールに(B \)古いDOSの時代から来た最も簡単な解決策は、十分なバックスペースを書くことです;-)あなたは現在のカーソル位置を取得するためにConsole.CursorLeft/Console.CursorTopを使用して考えられ

+0

ブリリアント! :P – Luke

0

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

0

を持っています最後のパーセント出力をクリアし、新しいものを印刷します。

+0

(\ r)は、カーソルを行の先頭に戻します – Jason

1

これは非常に簡単です。 \ r文字は、カーソルを現在の行の先頭に移動します。

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

printf("\n"); 
関連する問題