![]() |
Есть программа, к-ая на задоном диске, по заданному пути переименовывает файлы по маске *.[] в *.[]
#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 происходили поиск и переименование в поддирректориях? |
вопервых, функцию поиска в заданой папке вынеси отдельно.
скажем int SearchInDir(LPSTR path) далее, findfirst findnext ами нужно искать также и папки, и для каждой папки рекурсивно вызывать нашу функцию. |
Как ввести ключ /s ?
|
Vaulter
Цитата:
mask Цитата:
Цитата:
[s]Исправлено: shurikan, 13:07 9-04-2003[/s] |
Ключ /s для того, чтобы переименовывал в поддиректориях, вводится как параметр к exe-шнику.
В первой строке присваиваем переменной номер диска, а в последней происходит смена на этот диск. |
mask
Ты я думаю слышал о argc и argv так и используй их чтобы определить параметр к твоему .exe и соответсвенно выполникь кое какие команды. Но я тебе советовал бы ключ '/r' - recursive. gets(dir) не используй ее бери лучше fgets. |
#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; } |
Время: 10:11. |
Время: 10:11.
© OSzone.net 2001-