From: "Michael Stewart" Newsgroups: comp.os.msdos.djgpp Subject: Re: getting all filename in sub-directory Date: Wed, 28 Jul 1999 09:18:38 +0100 Organization: (Posted via) Netcom Internet Ltd. Message-ID: <7nmecv$d5c$1@taliesin.netcom.net.uk> References: <7nliit$uvc$1 AT nnrp1 DOT deja DOT com> NNTP-Posting-Host: hgty.capgemini.co.uk X-Trace: taliesin.netcom.net.uk 933149919 13484 194.42.240.2 (28 Jul 1999 08:18:39 GMT) X-Complaints-To: abuse AT corp DOT netcom DOT net DOT uk NNTP-Posting-Date: 28 Jul 1999 08:18:39 GMT X-Newsreader: Microsoft Outlook Express 4.72.3155.0 X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3155.0 Lines: 47 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com chongkong AT my-deja DOT com wrote in message <7nliit$uvc$1 AT nnrp1 DOT deja DOT com>... >is there any sample code to do a recursive process for file of a >certain extension from a parent directory and its sub-directory? > >i thinking of using system("dir > tmpfilename") >and then checking tmpfilename. >or is there a much better way There certainly is :-) >but i really have no clue on how to go on and search all the sub- >directory From the libc reference: #include int __file_tree_walk(const char *dir, int (*func)(const char *path, const struct ffblk *ff)); This function recursively descends the directory hierarchy which starts with dir. For each file in the hierarchy, `__file_tree_walk' calls the user-defined function func which is passed a pointer to a `NULL'-terminated character array in path holding the full pathname of the file, a pointer to a `ffblk' structure (see findfirst) fff with a DOS filesystem information about that file. This function always visits a directory before any of its siblings. The argument dir must be a directory, or `__file_tree_walk' will fail and set errno to `ENOTDIR'. The directory dir itself is never passed to func. The tree traversal continues until one of the following events: (1) The tree is exhausted (i.e., all descendants of dir are processed). In this case, `__file_tree_walk' returns 0, meaning a success. (2) An invocation of func returns a non-zero value. In this case, `__file_tree_walk' stops the tree traversal and returns whatever func returned. (3) An error is detected within `__file_tree_walk'. In that case, `ftw' returns -1 and sets errno (see errno) to a suitable value.