Печать, вращающаяся курсор в терминальном запущенном приложении с помощью C

Это возможно с помощью команды dir и цикла for:

@echo off

for /F "delims= eol=" %%A IN ('dir /A-D /B') do echo %%~nA

Если вам нужен полный путь без расширения, попробуйте:

[ 111]

Для однострочного cmd:

for /F "delims= eol=" %A IN ('dir /A-D /B') do echo %~nA

А для полного пути без расширения попробуйте:

for /F "delims= eol=" %A IN ('dir /A-D /B') do echo %~dpnA

Эти небольшие программы, цикл по всем файлам в папке, кроме каталогов, и echo только имена файлов / полные пути без расширения.

15
задан Misha M 13 October 2008 в 22:54
поделиться

5 ответов

Вы могли использовать символ возврата (\b) как это:

printf("processing... |");
fflush(stdout);
// do something
printf("\b/");
fflush(stdout);
// do some more
printf("\b-");
fflush(stdout);

и т.д. Вам нужно fflush(stdout), потому что обычно stdout буферизуется, пока Вы не производите новую строку.

21
ответ дан 1 December 2019 в 01:11
поделиться

Вот некоторый пример кода. Назовите advance_cursor () время от времени, в то время как задача завершается.

#include <stdio.h>

void advance_cursor() {
  static int pos=0;
  char cursor[4]={'/','-','\\','|'};
  printf("%c\b", cursor[pos]);
  fflush(stdout);
  pos = (pos+1) % 4;
}

int main(int argc, char **argv) {
  int i;
  for (i=0; i<100; i++) {
    advance_cursor();
    usleep(100000);
  }
  printf("\n");
  return 0;
}
12
ответ дан 1 December 2019 в 01:11
поделиться

Нет никакого действительно "стандартного" способа сделать это, так как Стандартная Библиотека C ( http://members.aol.com/wantondeb/ ) не обеспечивает функции, чтобы сделать необработанный вывод терминала/консоли.

консоль In DOS/Windows, стандартный выход способ сделать это с conio.h , в то время как под Unix/Linux принятая библиотека с этой целью ncurses (ncurses, в основном инкапсулирует поведение управляющего символа, которое MBCook описывает независимым от терминала способом).

1
ответ дан 1 December 2019 в 01:11
поделиться

Я сделал это, давно. Существует два пути.

  1. Пользуются библиотекой как ncurses, чтобы дать Вам контроль над терминалом. Это работает хорошо, если Вы хотите сделать много этого вида материала. Если Вы всего один это в одном небольшом месте, это - очевидно, излишество.

  2. Печать управляющий символ.

Первый Вы печатаете "/", тогда 0x08 (клавиша Backspace), тогда "-", тогда 0x08, тогда "\"....

символ возврата перемещается, позиция курсора поддерживают одно пространство, но оставляет текущий символ там, пока Вы не перезаписываете его. Разберитесь в синхронизации (таким образом, она не вращается к быстрому или медленному), и Вы являетесь золотыми.

2
ответ дан 1 December 2019 в 01:11
поделиться

Вы также можете использовать \ r :

#include <stdio.h>
#include <unistd.h>

void
advance_spinner() {
    static char bars[] = { '/', '-', '\\', '|' };
    static int nbars = sizeof(bars) / sizeof(char);
    static int pos = 0;

    printf("%c\r", bars[pos]);
    fflush(stdout);
    pos = (pos + 1) % nbars;
}

int
main() {
    while (1) {
        advance_spinner();
        usleep(300);
    }

    return 0;
}
2
ответ дан 1 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: