C :: Aufgabe #65 :: Lösung #3
3 Lösungen
#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.
Erweiterung: es soll möglich sein mit einem Muster, z.B. "*log.[1-3].gz" nach Dateien zu suchen.
#3
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:
C-Code
Beispiel:
Konsolenausgabe:
$ ./filter /usr/include '[ab]*.h'
aio.h
aliases.h
alloca.h
ar.h
argp.h
argz.h
assert.h
byteswap.h
/*****************************************
* 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
Seite 1 von 0
1
