#include #include #include #include #include #include #define N 255 typedef char PathToFile[N]; //================ deklaracje funkcji ============= int Menu(void); void GetFilesListFromFile(PathToFile *FileList); void GetFilesListFromDir (PathToFile *FileList); int main(void) { PathToFile *PathesToFile; switch(Menu()) { case 0 : GetFilesListFromFile(PathesToFile); break; case 1 : GetFilesListFromDir(PathesToFile); break; default : { printf("\nbledny wybor"); exit(0); } break; } while(PathesToFile) { printf("%s",PathesToFile); PathesToFile++; } free(PathesToFile); return 0; } //====== zwraca wybor uzytkownika ====== int Menu(void) { int Choice; printf("\n\t\t=== menu ===\n\n"); printf("\t 0 - wczytaj sciezki do plikow z pliku tekstowego\n"); printf("\t 1 - wszystkie pliki w wybranym katalogu\n"); printf("\n\n Twoj wybor: "); scanf ("%d",&Choice); return Choice; } //======== pobiera sciezki do plikow z pliku tekstowego ======== void GetFilesListFromFile(PathToFile *FileList) { FILE *FileFd; int Counter = 0; PathToFile Line; PathToFile *FileList_ptr = FileList; PathToFile FileName; fgets(FileName, N, stdin); FileFd = fopen(FileName, "r"); //===== zliczenie linii w pliku ===== while( !feof(FileFd) ) { if( fgetc(FileFd) == '\n' ) { ++Counter; } } fseek(FileFd, 0, SEEK_SET); //przejscie na poczatek pliku FileList = (PathToFile *)calloc( Counter+1, N ); //====== wczytanie sciezek plikow ====== while( !feof(FileFd) ) { if( fgets(Line, N, FileFd) != NULL ) { strcpy(*FileList, Line); FileList++; } } FileList = FileList_ptr; fclose(FileFd); } //======= pobiera sciezki do plikow z aktualnego katalogu ======== void GetFilesListFromDir(PathToFile *FileList) { DIR *Dir; struct dirent *Drnt; int Counter = 0; PathToFile *FileList_ptr = FileList; PathToFile DirName; printf("\npodaj sciezke do katalogu z plikami: "); fgets(DirName, N, stdin); Dir = opendir(DirName); //=== jesli zmiana katalogu roboczego sie nie powiedzie === if( chdir(DirName) ) { perror("chdir"); exit(0) ; } //===== zliczenie liczby plikow w katalogu ===== while( Drnt = readdir(Dir) ) { ++Counter; } rewinddir(Dir); //przejscie na poczatek katalogu FileList = (PathToFile *)calloc(Counter+1, N); while( Drnt = readdir(Dir) ) { strcpy( *FileList, Drnt->d_name ); //wczytanie nazwy pliku FileList++; } FileList = FileList_ptr; closedir(Dir); }