Verzeichnisstruktur einlesen
-
Hallo !!
Seit 3 Tagen furtz ich mit einer Rekursiven Funktion rum, welche meinen kompletten Verzeichnisbaum einlesen bzw. ausgeben soll.
Irgendwo hackts immer noch, und ich komm einfach net weiterHat wer eine simple Funktion rumliegen die er bitte posten könnte ??
Simpel insofern, das es jemand der erst seit 3 Monaten mit C programmiert auch verstehtDanke
Baboo
-
Poste deine Funktion doch mal!
-
schon einiger Schrott drinnen damit ich sehen kann was passiert ...
Is übrigens Linux, wird aber in Windows net viel anders sein
void baum_abstieg(char *pfad)
{DIR *dir;
struct dirent *dir_info;
struct stat attribut;
char dirname[1000];
char isdir[1000];
static int tiefe=1;chdir(pfad);
dir=opendir(pfad);
while((dir_info=readdir(dir))!= NULL)
{if(stat(dir_info->d_name,&attribut)!=-1 && strcmp(dir_info->d_name,"..")!=0 && strcmp(dir_info->d_name,".")!=0)
if(attribut.st_mode & S_IFDIR )
{
if(opendir(dir_info->d_name)!=NULL)
{
getcwd(isdir,1000);
strcpy(dirname,dir_info->d_name);
fprintf(stdout,"%s/%s\n",isdir,dirname);
getcwd(isdir,1000);
strcat(isdir,"/");
strcat(isdir,dir_info->d_name);
tiefe++;
baum_abstieg(isdir);
}
}
}
if (tiefe>0)
{
chdir("..");
fprintf(stdout,"Pfad: %s, Tiefe: %d\n",isdir,tiefe);
tiefe--;
}
}
-
und ab nach linux
-
Original erstellt von <Baboom>:
**schon einiger Schrott drinnen damit ich sehen kann was passiert ...Is übrigens Linux, wird aber in Windows net viel anders sein
void baum_abstieg(char *pfad) { DIR *dir; struct dirent *dir_info; struct stat attribut; char dirname[1000]; char isdir[1000]; static int tiefe=1; chdir(pfad); dir=opendir(pfad); while((dir_info=readdir(dir))!= NULL) { if(stat/*was macht die Funktion ?*/(dir_info->d_name,&attribut)!=-1 && strcmp(dir_info->d_name,"..")!=0 && strcmp(dir_info->d_name,".")!=0) if(attribut.st_mode & S_IFDIR ) { if(opendir(dir_info->d_name)!=NULL) { getcwd(isdir,1000); strcpy(dirname,dir_info->d_name); fprintf(stdout,"%s/%s\n",isdir,dirname); getcwd(isdir,1000); strcat(isdir,"/"); strcat(isdir,dir_info->d_name); tiefe++; baum_abstieg(isdir); } } } if (tiefe>0) { chdir(".."); fprintf(stdout,"Pfad: %s, Tiefe: %d\n",isdir,tiefe); tiefe--; } }
**
Was passiert denn genau? Welche Dateien includest du und gib mal alle selbst erstellten structs an?!
Der Code ist nicht unlogisch,erklär mal was passiert![ Dieser Beitrag wurde am 03.04.2003 um 13:43 Uhr von ºgrimmsenº
editiert. ]
-
hoi !!
Dummheit gehört bestraft, ich bin über verlinkte Verzeichnisse gestolpert, dadurch mit chdir("..") in einem falschen DIR rausgeklettert
Auf Deine Frage ...
die Funktion stat() fragt dateiinformationen ab und knallt diese in den struct stat attribut
struct stat {
dev_t st_dev; /* device /
ino_t st_ino; / inode /
mode_t st_mode; / protection /
nlink_t st_nlink; / number of hard links /
uid_t st_uid; / user ID of owner /
gid_t st_gid; / group ID of owner /
dev_t st_rdev; / device type (if inode device) /
off_t st_size; / total size, in bytes /
blksize_t st_blksize; / blocksize for filesystem I/O /
blkcnt_t st_blocks; / number of blocks allocated /
time_t st_atime; / time of last access /
time_t st_mtime; / time of last modification /
time_t st_ctime; / time of last change */
};mit if(attribut.st_mode & S_IFDIR ) kannst dann checken ob es ein Verzeichnis, reguläre Datei oder eine Gerätedatei ist.
Danke für die Angebotene Hilfe, .. hat sich aber somit erledigt.
sers
Baboo
-
kennt jmd ein tutorial/buch, wo diese verzeichnis-fumktionen beschrieben sind?
in meinem buch stand nix dazu, aber ich bräuchte die komplette unterverzeichnisstruktur eines ordners samt dateien (am liebsten so wie ein "dir" unter dos/windows-cmd(is aber linux) in nem array)
mfg
Sebastian
-
schau mal unter www.pronix.de ->C-Programmierung->Ansi-C->Punkt20.x
speziell:
http://www.pronix.de/C/standard_C/c_programmierung_20_2.shtml#5
-