004
04.10.2005, 14:01 Uhr
Pablo
Supertux (Operator)
|
Naja, mit C/C++ kannst du leider keine Patterns angeben, da musst du etwas mit strncmp zaubern oder so. Für das Einlesen von Verzeichnise und Dateien stehen dir folgende Funktionen zur Verfügung:
struct dirent *readdir(DIR *dir); (brauchst dafür sys/types.h und dirent.h) int lstat(const char *path, struct stat *buf); (sys/types.h, sys/stat.h, unistd.h)
und so geht es:
C++: |
#include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <dirent.h>
int dirlist_r(const char* path, size_t indent) { DIR* directory; struct dirent* dirInfo; struct stat attr; struct stat* attributes = &attr; size_t i;
char[1024] filename, print_indent; char* statname;
if(!path or indent > 1024) return 0;
/* finde heraus, ob angegebener Pfad auch Verzeichnis ist */
if(lstat(path, attributes)==0) { if(!S_ISDIR(attributes->st_mode)) { fprintf(stderr, "%s is not a directory\n", path); return 0; } } else return 0;
*print_indent = 0; for(i=0; i<indent; ++i) strcat(print_indent, " ");
directory = opendir(path);
if(!directory) { printf("cannot open directory\n"); return 1; } else printf("\n");
while( (dirInfo = readdir(directory)) ) { /* generate whole path */ i = dir[strlen(dir) - 1] == '/' ? 0 : 1;
statname = malloc(strlen(dir) + 1 + i + strlen(dirInfo->d_name));
if(!statname) { fprintf(stderr, "You don't have enough memory\n"); return 0; }
*statname = 0;
strcat(statname, dir); strcat(statname, i ? "/" : ""); strcat(statname, dirInfo->d_name);
/* read file attributes with lstat. If fails, then ignore file/dir */ if(lstat(statname, attributes)==0) { if(S_ISDIR(attributes->st_mode)) {
/* make a recursiv search, but ignore * . * .. */
if( strcmp(dirInfo->d_name, ".") && strcmp(dirInfo->d_name, "..")) { printf("%s%s (dir) -->", print_indent, path); dirlist_r(statname, indent + 4); } } else printf("%s%s (file)\n", print_indent, dirInfo->d_name); } free(statname); }
return 1; }
|
ich hab's on the fly gemacht, hoffe, hab keinen Fehler gemacht. Diese Funktion liefert den Verzeichnisbaum + Dateien (rekursiv) eines Verzeichnises.
( --> ) -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 04.10.2005 um 14:01 Uhr von Pablo editiert. |