c·c++/c 프로그래밍

디렉토리 리스팅(윈도우)

바로이순간 2013. 1. 31. 17:52

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <windows.h>

char *newpath(char pathname[], char dirname[]) {

    char *s;

    s = calloc(256, 1);

    if(s==NULL) return s;

    strcpy(s, pathname);

    strcat(s, "\\");

    strcat(s, dirname);

    return s;

}

int dirlist(char path[]) {

    WIN32_FIND_DATA ffd;

    HANDLE hFind;

    char *dirnames[100];

    int i, k=0;

      

    hFind = FindFirstFile(newpath(path, "*.*"), &ffd);

      

    if (hFind == INVALID_HANDLE_VALUE) {

        printf ("FindFirstFile failed (%d)\n", GetLastError());

        return 0;

    }

      

    FindNextFile(hFind, &ffd);  // for .

    FindNextFile(hFind, &ffd);  // for ..

      

    do {

        if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {

            dirnames[k]=newpath(path, ffd.cFileName);

            printf("[%s]\n", dirnames[k]);

            ++k;

        }

        else {

            printf("%s\n", ffd.cFileName);

        }

    } while (FindNextFile(hFind, &ffd) != 0);

      

    FindClose(hFind);

      

    for(i=0;i<k;++i) {

        printf("[[%s]]\n", dirnames[i]);

    }

    return 0;

}


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

    dirlist(argv[1]);    // usage "filelist [path name]"

    return 0;            // [path name] is a full path name

}