2009-07-02 2 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

Рассматривали ли вы с помощью Console.CursorLeft/Console.CursorTop, чтобы получить текущую позицию курсора ;-)

+0

Блестящий! : P – Luke

0

Это не ограничение платформы; Я знаю, что проклятия - хороший инструмент для создания такого рода вещей, и в Windows есть версия. (Nethack - отличный пример того, что вам нужно, и консольная версия Windows довольно интересна в качестве бонуса.) Я не знаю, есть ли что-то для этого уровня контроля на .NET. Возможно, компиляция в управляемом коде проклятий может сделать то, что вы хотите?

0

Простейшее решение, которое пришло из старых времен DOS, чтобы написать достаточно забоя (\ б) в консоли чтобы очистить последний процентный результат, а затем распечатать новый.

+0

(\ r) переместит курсор обратно к началу строки – Jason

1

Это довольно просто. Символ \ r перемещает курсор в начало текущей строки.

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

printf("\n"); 
Смежные вопросы