当前位置:软件学习 > Director >>

how to read directory name using std c in the linux

[cpp] #include <sys/types.h>  
#include <dirent.h>  
#include <stdio.h>  
#include <unistd.h>  
#include <getopt.h>  
 
#define err_quit printf  
#define err_sys  printf  
 
#define TRUE         1  
#define FALSE        0  
#define EXIT_FAILE   0  
#define EXIT_SUCESS  1  
#define bool         char  
 
static char g_cur_dir[256] = ""; 
int read_directory(char *dir_name, bool brecurse); 
void usage(char state, char *str); 
 
int main(int argc, char **argv) 

    int       c; 
    char      recurse = 0; 
    struct option long_option[]= { 
        {"dirname", no_argument,       NULL,  0 },  
        {"recurse", optional_argument, NULL, 'r'}, 
        {"help",    no_argument,       NULL, 'h'}, 
        {0,         0,                 0,     0 }, 
    }; 
    //read current directory.  
    //if no any params, read current dir files.  
    if(argc < 2) 
    { 
        read_directory("./", TRUE); 
        return ; 
    } 
    //read command line params.  
    while((c = getopt_long(argc, argv, "hr::", long_option, NULL)) != EOF) 
    //while((c = getopt(argc, argv, ":hr::")) != EOF)  
    { 
        switch(c) 
        { 
            case 'r': 
                recurse = 1; 
                break; 
            case 'h': 
                usage(EXIT_SUCESS, argv[0]); 
                break; 
            default: 
                usage(EXIT_FAILE, argv[0]); 
                break; 
        } 
    } 
    if (recurse && (optind == argc)) 
    { 
        read_directory("./", TRUE); 
        exit(0); 
    } 
    //read all files from argv[optind].  
    for(; optind < argc; ++optind) 
    { 
        read_directory(argv[optind], recurse); 
    } 
    exit(0); 

int read_directory(char *dir_name, bool brecurse) 
{    
    DIR            *dp; 
    struct dirent  *dir; 
    strcpy(g_cur_dir, dir_name); 
    if (g_cur_dir[strlen(g_cur_dir) -1] == '/') 
        g_cur_dir[strlen(g_cur_dir) -1] = 0; 
    if ((dp = opendir(dir_name)) == NULL)  
    { 
        err_sys("can't open %s. \n", dir_name); 
        return ; 
    } 
    while( (dir = readdir(dp)) != NULL) 
    { 
        if ( brecurse && (DT_DIR == dir->d_type)  
                && (strcmp(dir->d_name, ".") != 0)  
                && (strcmp(dir->d_name, "..") != 0) ) 
        { 
            printf("%s/", g_cur_dir); 
            printf("%s\n", dir->d_name); 
            strcat(g_cur_dir, "/"); 
            strcat(g_cur_dir, dir->d_name); 
            read_directory(g_cur_dir, brecurse); 
            g_cur_dir[strlen(g_cur_dir) - strlen(dir->d_name) - 1] = 0;  
        } 
        else 
        { 
            printf("%s/", g_cur_dir); 
            printf("%s\n", dir->d_name); 
        } 
    } 
    closedir(dp); 

void usage(char state, char *str) 

    if (state == EXIT_FAILE) 
    { 
        printf("\n"); 
    } 
    else 
    { 
        printf("\n"); 
        printf("========================================\n"); 
        printf("read directory:\n"); 
        printf("\n"); 
        printf("Usage: %s [-r] [directory]\n\n", str); 
        printf("   &nbs

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,