C :: Aufgabe #65 :: Lösung #1
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.
#1
von devnull (8870 Punkte)
- 07.12.2014 um 18:06 Uhr
Variante 1: Suche über Dateinamenserweiterung (Extension)
C-Code
Konsolenausgabe:
$ ./filter /var/log .log
dpkg.log
alternatives.log
pm-suspend.log
user.log
auth.log
...
/*****************************************
* 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
Seite 1 von 0
1
