Qual è il modo migliore per visualizzare la percentuale di completamento in un'applicazione .NET CLI?

StackOverflow https://stackoverflow.com/questions/1076761

Domanda

Sto lavorando su un'applicazione CLI che si occupa di caricamento di file, e vorrei avere una combinazione di uscita aggiunto e sovrascritto. L'ideale sarebbe simile a questa:

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

Mi piacerebbe solo l'ultima fila di aggiornare periodicamente la percentuale di completamento e la corrente velocità. So che posso usare setCursorPosition per scrivere l'output a qualsiasi parte della console, ma sembra non v'è alcuna GetCursorPosition e la posizione assoluta del nome del file più recente stampato varierà. Mi chiedo anche come tutto questo influenzerà uscita reindirizzato, ma la manipolazione che correttamente non è critico per questa applicazione.

Modifica : Sembra che il Console.CursorLeft / Console.CursorTop ecc mi darà la posizione corrente del cursore. Ho guardato a destra al em troppo! Oh bene. Libera risposta accettata se qualcuno lo vuole.

È stato utile?

Soluzione

Hai pensato di usare il Console.CursorLeft / Console.CursorTop per ottenere la posizione corrente del cursore ;-)

Altri suggerimenti

Questo è abbastanza semplice da fare. Il carattere \ r sposta il cursore all'inizio della riga corrente.

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

printf("\n");

Non è una limitazione della piattaforma; So che le maledizioni è un buon strumento per fare proprio questo genere di cose, e non c'è una versione di Windows. (Nethack è un grande esempio di proprio il tipo di controllo che si ha bisogno, e la versione console di Windows è piuttosto divertente come un bonus.) Non so se c'è qualcosa per quel livello di controllo su .NET, però. Forse una compilazione in codice gestito di imprecazioni potrebbe fare quello che vuoi?

La soluzione più semplice che è venuto da vecchi tempi del DOS, è quello di scrivere abbastanza backspace (\ b) nella console per cancellare l'ultima uscita per cento, e quindi stampare il nuovo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top