All pastes #448772 Raw Edit

Stuff

public text v1 · immutable
·published 2007-04-19 21:30 UTC
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);
}