2009-07-02 3 views
4

Ich arbeite an einer CLI-Anwendung, die das Hochladen von Dateien behandelt und eine Kombination aus angehängter und überschriebener Ausgabe haben möchte. Im Idealfall wäre es so etwas wie folgt aussehen:Was ist der beste Weg, den Prozentwert in einer .Net CLI-Anwendung anzuzeigen?

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

würde ich nur die letzte Zeile wie in regelmäßigen Abständen die Prozent abgeschlossen und die aktuelle Geschwindigkeit zu aktualisieren. Ich weiß, dass ich SetCursorPosition verwenden kann, um Ausgaben in einen beliebigen Teil der Konsole zu schreiben, aber es scheint, dass es keine GetCursorPosition gibt und die absolute Position des zuletzt gedruckten Dateinamens variiert. Ich frage mich auch, wie all dies die umgeleitete Ausgabe beeinflusst, aber die korrekte Handhabung ist für diese App nicht entscheidend.

BEARBEITEN: Sieht aus wie die Console.CursorLeft/Console.CursorTop usw. gibt mir die aktuelle Cursorposition. Ich schaute auch auf sie! Naja. Kostenlose akzeptierte Antwort, wenn jemand es will.

+0

Post die Antwort selbst eine Marke ist wie akzeptiert. Ich denke, es könnte ein Abzeichen zu sammeln sein, wenn nichts anderes ... –

+0

Zuletzt habe ich es überprüft, lass dich nur nach 48 Stunden selbst akzeptieren. Hat sich das geändert? – Luke

Antwort

3

Haben Sie darüber nachgedacht, das Console.CursorLeft/Console.CursorTop mit der aktuellen Cursorposition bekommen ;-)

+0

Brilliant! : P – Luke

0

Es ist keine Plattformbegrenzung; Ich weiß, dass Flüche ein gutes Werkzeug sind, um genau diese Art von Sachen zu machen, und es gibt eine Version unter Windows. (Nethack ist ein großartiges Beispiel für genau die Art von Kontrolle, die Sie brauchen, und die Windows-Konsolenversion ist als Bonus ziemlich unterhaltsam.) Ich weiß nicht, ob es irgendetwas für diese Kontrollebene auf .NET gibt. Vielleicht könnte eine Kompilation in verwaltetem Code von Flüchen tun, was Sie wollen?

0

Die einfachste Lösung, die aus alter DOS Zeiten kam, ist genug, um Rückschritte (\ b) in der Konsole zu schreiben um die letzte prozentuale Ausgabe zu löschen und dann die neue zu drucken.

+0

(\ r) verschiebt den Cursor zurück zum Anfang der Zeile – Jason

1

Dies ist ziemlich einfach zu tun. Das \ r-Zeichen bewegt den Cursor an den Anfang der aktuellen Zeile.

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

printf("\n"); 
Verwandte Themen