Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » переименование файлов

Ответить
Настройки темы
переименование файлов

Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Есть программа, к-ая на задоном диске, по заданному пути переименовывает файлы по маске *.[] в *.[]

#include <stdio.h>
#include <dos.h>
#include <dir.h>
#include <stdlib.h>
#include <direct.h>

main()
{
      char sf; int d;
      char dir[MAXPATH];

      printf("Please, input the name of drive (‘,D,E,F etc.) : ";
      scanf("%c", &sf);
      if(sf=='C' || sf=='c') d=2;
      if(sf=='D' || sf=='d') d=3;
      if(sf=='E' || sf=='e') d=4;
      if(sf=='F' || sf=='f') d=5;
      int disk = setdisk(d);
      disk = getdisk() + 'A';
      printf("The current drive is: %c\n", disk);
      _chdrive(d+1);

      printf("Input path: ";
      gets(dir);      /* Почему-то компилятор игнорирует эту строку и пропускает ее, почему? и как исправить*/
      chdir(dir);

      struct find_t ffblk;
      int done;
      printf("Directory listing of \%s\n", dir);
      done = _dos_findfirst("*.*",_A_NORMAL,&ffblk);
      while (!done)
      {
    printf("  %s\n", ffblk.name);
    done = _dos_findnext(&ffblk);
      }
     
      char oldname[80], newname[80];

      /* prompt for file to rename and new name */
      printf("File to rename: ";
      gets(oldname);
      printf("New name: ";
      gets(newname);

      /* Rename the file */
      if (rename(oldname, newname) == 0)
 printf("Renamed %s to %s.\n", oldname, newname);
      else
  perror("rename";

return 0;
}

Как сделать так что при указании ключа /s происходили поиск и переименование в поддирректориях?

Отправлено: 00:53, 03-04-2003

 

Пользователь


Сообщения: 65
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


вопервых, функцию поиска в заданой папке вынеси отдельно.
скажем
int SearchInDir(LPSTR path)

далее, findfirst findnext ами нужно искать также и папки, и для каждой папки рекурсивно вызывать нашу функцию.

Отправлено: 06:16, 03-04-2003 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Как ввести ключ /s ?

Отправлено: 00:56, 08-04-2003 | #3


Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


Vaulter
Цитата:
вопервых, функцию поиска в заданой папке вынеси отдельно.
скажем
int SearchInDir(LPSTR path)
Во-первых он ничего не ищет, а просто распечатывает содержимое папки. Потом ручками вводит старое и новое имя.

mask
Цитата:
Как ввести ключ /s ?
Куда ввести? И зачем?

Цитата:
int disk = setdisk(d);
* * *disk = getdisk() + 'A';
* * *printf("The current drive is: %c\n", disk);
* * *_chdrive(d+1);
Здесь первая и последняя строки, зачем это?


[s]Исправлено: shurikan, 13:07 9-04-2003[/s]

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 13:05, 09-04-2003 | #4


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ключ /s для того, чтобы переименовывал в поддиректориях, вводится как параметр к exe-шнику.
В первой строке присваиваем переменной номер диска, а в последней происходит смена на этот диск.

Отправлено: 15:45, 09-04-2003 | #5

glassMonk


Сообщения: n/a

Профиль | Цитировать


mask
Ты я думаю слышал о argc и argv так и используй их чтобы определить параметр к твоему .exe и соответсвенно выполникь кое какие команды.
Но я тебе советовал бы ключ '/r'  - recursive.
gets(dir) не используй ее бери лучше fgets.

Отправлено: 03:24, 11-04-2003 | #6


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


#include <stdio.h>
#include <dos.h>
#include <dir.h>
#include <string.h>

char ch[3]="\\", sim1[2]=".", sim2[3]="..";
char sum[MAXPATH], presum[MAXPATH];

int rename_file(char oldn[], char newn[]) {
if (rename(oldn, newn) == 0)
printf("Переименование из %s в %s успешно завершено\n", oldn, newn);
return 0;
}

char find_dir(char *prm1,char *prm2,char *dir){
struct ffblk ffblk;
int don; char dr[MAXPATH];
don = findfirst("*",&ffblk, FA_DIREC);
while (!don) {
int sim21=strcmp(ffblk.ff_name,sim1);
int sim22=strcmp(ffblk.ff_name,sim2);
if( sim21!=0 && sim22!=0 && !don ){
strcpy(presum, dir); strcat(presum, ch);
strcpy(sum, presum); strcat(sum, ffblk.ff_name);

getcwd(dr, MAXPATH);
chdir(sum);
rename_file(prm1,prm2);
find_dir(prm1,prm2,sum);
chdir(dr);
}

don = findnext(&ffblk);
}
return 0;
}

main(int argc, char *argv[]){
if (argc>5)
printf("Неверные параметры \n";
else {
char tekdir[MAXPATH];

getcwd(tekdir, MAXPATH);
chdir(argv[3]);

if (argc==4)
  rename_file(argv[1],argv[2]);
if (argc==5){
 if(strcmp("/s",argv[4])==0){
    rename_file(argv[1],argv[2]);
    find_dir(argv[1],argv[2],argv[3]);
}
else
printf("Неверный параметр \n";
}
chdir(tekdir);
}
return 0;
}

Отправлено: 00:53, 20-05-2003 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » переименование файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Переименование файлов с заменой символов по маске Constantant Скриптовые языки администрирования Windows 41 29-03-2016 03:40
Интерфейс - [решено] Переименование большого количества файлов 7human7 Microsoft Windows 2000/XP 7 22-11-2008 09:48
Разное - [решено] Переименование файлов mitrik Microsoft Windows 2000/XP 3 22-08-2008 04:53
Разное - [решено] Переименование файлов как в Vista sashaegor Microsoft Windows 2000/XP 5 29-01-2008 21:59
Переименование файлов Pavelz Microsoft Windows NT/2000/2003 7 24-01-2003 10:32




 
Переход