2009-07-02 8 views
4

Je travaille sur une application CLI qui s'occupe du téléchargement de fichiers, et j'aimerais avoir une combinaison de sorties ajoutées et écrasées. Idéalement, il ressemblerait à quelque chose comme ceci:Quelle est la meilleure façon d'afficher le pourcentage complet dans une application CLI .Net?

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

J'aimerais juste que la dernière rangée mette à jour périodiquement le pourcentage d'achèvement et la vitesse actuelle. Je sais que je peux utiliser SetCursorPosition pour écrire une sortie sur n'importe quelle partie de la console, mais il semble qu'il n'y a pas GetCursorPosition et la position absolue du nom de fichier imprimé le plus récemment varie. Je me demande également comment tout cela affectera la sortie redirigée, mais la manipulation correctement n'est pas critique pour cette application.

EDIT: Apparemment, Console.CursorLeft/Console.CursorTop etc. me donnera la position actuelle du curseur. J'ai regardé droit à eux aussi! Tant pis. Réponse libre acceptée si quelqu'un le veut.

+0

Postez la réponse vous-même une marque est comme aujourd'hui. Je pense qu'il y a peut-être un badge à collectionner, si ce n'est rien d'autre ... –

+0

Dernière fois que je l'ai vérifié, je ne peux que m'auto-accepter après 48 heures. Est-ce que cela a changé? – Luke

Répondre

3

Avez-vous pensé à utiliser la Console.CursorLeft/Console.CursorTop pour obtenir la position actuelle du curseur ;-)

+0

Brillant! : P – Luke

0

Ce n'est pas une limitation de plate-forme; Je sais que les malédictions sont un bon outil pour faire ce genre de choses, et il y a une version sur Windows. (Nethack est un excellent exemple du type de contrôle dont vous avez besoin, et la version de la console Windows est plutôt amusante en prime.) Je ne sais pas s'il y a quoi que ce soit pour ce niveau de contrôle sur .NET. Peut-être qu'une compilation en code managé de malédictions pourrait faire ce que vous voulez?

0

La solution la plus simple qui venait de vieux temps DOS, est d'écrire assez backspaces (\ b) dans la console pour effacer le dernier pourcentage de sortie, puis imprimez le nouveau.

+0

(\ r) ramènera le curseur au début de la ligne – Jason

1

C'est assez simple à faire. Le caractère \ r déplace le curseur au début de la ligne en cours.

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

printf("\n"); 
Questions connexes