C :: Aufgabe #65 :: Lösung #1

3 Lösungen Lösungen öffentlich
#65

Programm für Dateisuche (Dateifilter)

Anfänger - C von devnull - 29.11.2014 um 08:17 Uhr
Realisiere einen Dateifilter. Das Programm soll einen Verzeichnispfad und eine Namenserweiterung , z.B. ".txt" abfragen und alle dazu passenden Dateien aus dem Verzeichnis auflisten (Dateiname genügt).
Erweiterung: es soll möglich sein mit einem Muster, z.B. "*log.[1-3].gz" nach Dateien zu suchen.
#1
vote_ok
von devnull (8870 Punkte) - 07.12.2014 um 18:06 Uhr
Variante 1: Suche über Dateinamenserweiterung (Extension)

Konsolenausgabe:


$ ./filter /var/log .log
dpkg.log
alternatives.log
pm-suspend.log
user.log
auth.log
...

Quellcode ausblenden C-Code
/*****************************************
 * filter.c   Dateifilter (File-Extension)
 *****************************************/
#include <string.h>
#include <dirent.h>
#include <errno.h>
#include <stdio.h>

#define PATH_LEN 255
#define EXT_LEN 31

int main(int argc, char **argv) {
    DIR* dir;
    struct dirent *dire;
    char dirpath[PATH_LEN+1];
    char filext[EXT_LEN+1];
    char *fp;
    int lext;

	if (argc > 2) {
		strncpy(dirpath, argv[1], PATH_LEN);
		strncpy(filext, argv[2], EXT_LEN);
	} else {		
		printf("Verzeichnispfad: ");
		scanf("%s", dirpath);
		printf("Datei-Extension: ");
		scanf("%s", filext);
	}
	// max. length of file extension
	lext = strlen(filext);
	if (lext > EXT_LEN)
		lext = EXT_LEN;

	// open directory
    if ((dir = opendir(dirpath)) == NULL) {
		fprintf(stderr, "cannot open '%s': %s\n", dirpath,\
		        strerror(errno));
		return 1;
    }
   	// read directory
    while ((dire = readdir(dir)) != NULL) {
		if (errno > 0) {
			fprintf(stderr, "error while reading directory entry: %s\n",\
			        strerror(errno));
			break;
		}
		fp = dire->d_name + strlen(dire->d_name) - lext;
		if (strcmp(fp, filext) == 0)
			printf("%s\n", dire->d_name);
    }
	// close directory
    closedir( dir );
    return 0;
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben