Цикл массива не работает - PullRequest
0 голосов
/ 21 марта 2011

Я пробовал это:

if (argc > 2) {
  int i;
  for(i = 0; i < argc; i++) {
    if(i != 0) {
      rename_file(argv[i]);
    }
  }
}

если я передаю два имени файла, только первое переименовывается, что не так с этим циклом?

РЕДАКТИРОВАТЬ : Вот функция rename_file (она должна работать, я думаю)

void rename_file(char const *filename) {
  struct tm *clock;
  struct stat attrib;
  const char *dot = strrchr(filename, '.');
  const char *ext = NULL;
  if (dot && *dot) {
      ext = dot + 1;
  }

  stat(filename, &attrib);

  clock = gmtime(&(attrib.st_mtime));

  char newname[250];
  if (!ext) {
    printf("ERROR: No File Extenstion");
  } else {
    sprintf(newname, "%02d_%02d_%02d.%s", clock->tm_mday, clock->tm_mon, clock->tm_year + 1900, ext);
  }

  rename(filename, newname);
}

Ответы [ 5 ]

1 голос
/ 21 марта 2011

Попробуйте это:

if (argc > 2) {
  for(int i = 1; i < argc; i++) {
      rename_file(argv[i]);
  }
}
0 голосов
/ 21 марта 2011

Вы не проверяете возвращаемое значение rename.Если вы передадите имя двум файлам, созданным в одну и ту же дату (и с одинаковым расширением), второй файл, скорее всего, потерпит неудачу (хотя это зависит от вашей библиотеки).И исправьте свою петлю, как все остальные указали.

0 голосов
/ 21 марта 2011

Я не вижу ошибку как таковую, но я вижу много избыточности в коде.Вы можете просто сделать это:

for (i = 1; i < argc; i++)
{
    rename_file(argv[i]);
}

Если у вас нет отладчика, вы можете временно добавить отладку printf s:

printf("argc = %d\n", argc);
for (i = 1; i < argc; i++)
{
    printf("i = %d, argv[i] = %s\n", i, argv[i]);
    rename_file(argv[i]);
}

Это позволит вам увидеть, чтопроисходит в цикле перед каждым вызовом rename_file.

0 голосов
/ 21 марта 2011

Если ваша командная строка выглядит так:

./renamestuff stuff.txt stuff.php

Тогда вы, вероятно, хотите это:

for(int i = 1; i < argc; i++) {
    rename_file(argv[i]);
}
0 голосов
/ 21 марта 2011

Первый элемент argv[0] содержит имя самого исполняемого файла. Поэтому ваш цикл должен начинаться с первого элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...