rendered paste body#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#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);
}