Back to C Programming Index



     
A Filter to Show Subdirectories

This shows the sub-directories in the current path.

It's not a lot different to something like...

    ls-l | grep ^d | cut xxx

Where xxx is the position of the filename but unlike the shell code, it isn't subject to the vagaries of the ls command.

/* --------------------------------------------
  Name: sdr
  Purpose: Displays the directories subservient
           to the current directory.
  ------------------------------------------ */

#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>

main(int argc, char *argv[]){

  char *DirectoryName;
  DIR *ThisDirectory;          /* List of directory contents */
  struct dirent *ThisEntry;    /* Entries in the directory list */
  struct stat ThisEntryStatus; /* Directory status entries */

  switch (argc)
  {
     case 1: DirectoryName = (char *)".";
             break;
     default: printf("sdr must be invoked from within the desired path.
\n");
             break;
  }

  if((ThisDirectory = opendir(DirectoryName)) == NULL)
  {
     printf("'%s' is not a valid path
\n", DirectoryName);
     return(1);
  }

  /* ---------------------------------------------------------
  Loop through the struct pulling out a pointer
  to a directory entry on each pass.
  Put this entry into a ThisEntryStatus struct
  and if that succeeds, check to see if this is a directory.
  If it is, check that it isn't the current (.) or parent (..)
  entry. if not, print the directory name...
  --------------------------------------------------------- */
  while (ThisEntry = readdir(ThisDirectory))
  {
     if (stat(ThisEntry->d_name, &ThisEntryStatus) == 0)
        if (ThisEntryStatus.st_mode & S_IFDIR)
           if (strcmp(ThisEntry->d_name, ".") != 0)
              if (strcmp(ThisEntry->d_name, "..") != 0)
                  printf("%s
\n
", ThisEntry->d_name);
  }
  return closedir(ThisDirectory);

}


Find out more by searching Google here...

Google