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

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.
#3
vote_ok
von devnull (8870 Punkte) - 18.01.2015 um 14:07 Uhr
Die dritte Lösung für den Dateifilter verwendet Path-Globbing analog zur (Unix/Linux-)Shell-Kommandozeile. Die Ergebnisse werden sortiert ausgegeben:
Beispiel:

Konsolenausgabe:


$ ./filter /usr/include '[ab]*.h'
aio.h
aliases.h
alloca.h
ar.h
argp.h
argz.h
assert.h
byteswap.h


Quellcode ausblenden C-Code
/*****************************************
 * filter3.c   Dateifilter (Glob Match)
 *****************************************/
#include <unistd.h> 
#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <glob.h>
 
#define PATH_LEN 255
#define GLOB_LEN 255
 
int main(int argc, char **argv) {
    char dirpath[PATH_LEN+1];
    char pattern[GLOB_LEN+1];
	glob_t globbuf;
	int cp;
 
    if (argc < 2) {
		fprintf(stderr, "Usage: ./filter <Pfad> <Muster>\n");
		return 1;
	}
    strncpy(dirpath, argv[1], PATH_LEN);
    strncpy(pattern, argv[2], GLOB_LEN);
    if (chdir(dirpath) != 0)
		fprintf(stderr, "chdir %s: %s\n", dirpath, strerror(errno));
    
    // do path globbing and read matched paths
    glob(pattern, 0, NULL, &globbuf);
    for (cp=0; cp < globbuf.gl_pathc; cp++) {
        if (globbuf.gl_pathv[cp] != NULL)
			printf("%s\n", globbuf.gl_pathv[cp]);
    }
	globfree(&globbuf);
    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