Pergunta

Eu estou trabalhando em um aplicativo CLI que lida com o carregamento de arquivos, e gostaria de ter uma combinação de saída anexado e substituído. Idealmente, seria algo parecido com isto:

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

Eu gostaria apenas a última linha para atualizar periodicamente a porcentagem de velocidade completa e atual. Eu sei que eu posso usar SetCursorPosition a saída de gravação para qualquer parte do console, mas parece que não há GetCursorPosition ea posição absoluta do nome do arquivo impresso mais recentemente irá variar. Gostaria também de saber como tudo isso vai afetar saída redirecionada, mas lidar com isso corretamente não é crítico para esta aplicação.

Editar : Parece que o Console.CursorLeft / Console.CursorTop etc. me dará a posição atual do cursor. Eu olhei bem no em também! Ah bem. Livre aceito resposta se alguém quer.

Foi útil?

Solução

Você já pensou em usar o Console.CursorLeft / Console.CursorTop para obter a posição atual do cursor ;-)

Outras dicas

Isto é muito simples de fazer. O personagem \ r move o cursor para o início da linha atual.

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

printf("\n");

Não é uma limitação de plataforma; Eu sei que maldições é uma boa ferramenta para fazer exatamente esse tipo de coisa, e não há uma versão no Windows. (Nethack é um grande exemplo de exatamente o tipo de controle que você precisa, e a versão console do Windows é bastante divertido como um bônus.) Eu não sei se há alguma coisa para esse nível de controle sobre .NET, no entanto. Talvez uma compilação em código gerenciado de maldições pode fazer o que quiser?

A solução mais simples que veio desde os tempos do DOS antigos, é escrever backspaces suficientes (\ b) na consola de clara última saída por cento e, em seguida, imprimir o novo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top