[Study]/[ETC]2012. 9. 7. 07:13

#include <stdio.h>
#include <io.h>
#include <time.h>
#include <conio.h>

void main( void )
{
    struct _finddata_t c_file; 
 /* 위에서 struct _finddata_t 는 MS사에서 제공하는 구조체 
    자료형으로서 파일 정보 관리를 위한 자료형 입니다.

    _finddata_t라는 자료형은 io.h에 아래와 같이 6개의 필드를
    갖는 구조체 자료형으로 정의되어져 있습니다.

    struct _finddata_t {
                            unsigned    attrib; // 파일 속성 기억용 필드
                            time_t      time_create;  

                                   // 파일을 만든 시간(지원하지 않음: 항상 -1값 가짐)
                            time_t      time_access;   

                                    // 파일을 마지막으로 처리한 시간(지원하지 않음: 항상 -1값 가짐)
                              time_t      time_write;    // 마지막으로 파일을  기록한 시간
                            _fsize_t    size;          // 파일 사이즈 (바이트 수)
                             char        name[260];    

                                          // 매치된 파일과 디렉토리 이름( 단, 패스네임은 없음)
       };
    
    파일 속성 기억용 필드에 담겨지는 값

   1)  _A_ARCH (아카이브) 값:0x20
    2) _A_HIDDEN(히든파일) 히든 파일은 일반적인 dir명령으로는 보이지 않는다. 값:0x02)
                        단, dir /ah 옵션을 사용하면 보인다.
   3) _A_NORMAL(일반정보파일) : 어떤 제한이 없는 읽기, 쓰기용 파일. 값:0x00)

    4)  _A_RDONLY(읽기용 파일) 값: 0x01

    5)  _A_SUBDIR(써브 디렉토리인지 아닌지 파악) 값: 0x10

    6)  _A_SYSTEM(시스템 파일) 일반적인 dir명령으로 볼수 없는 파일.값:0x04
     단, dir  /a 나 dir/a:s옵션으로 보는 것은 가능

  */


    long hFile;  

 /*  위에서 hFile 변수는 
     findfirst함수를 호출하였을 때 리턴 되어지는 값을 담아둘 목적으로 만든 변수입니다.
  findfirst를 하였을 때 매치되는 파일이 없으면 -1값이 돌아 오게 됩니다.

 
 findfirst함수는 원하는 파일이 디스크에 존재하는지 파악하기 위한 함수로서 
 형식은 아래와 같습니다.
 long  _findfirst( char *filespec, struct _finddata_t *fileinfo );
    소속: io.h
    첫번째 매개변수에 전달된 파일이름과 동일한 파일이 발견되었을 때 발견된 첫번째
    파일에 대한 정보를 두번째 구조체 매개변수에 보관하게 됩니다.
 발견되는 파일이 없으면 -1값이  리턴된다.
    첫번째 매개변수에는 와일드카드문자(*,?)를 사용할 수 있습니다.
 


     int _findnext( long handle, struct _finddata_t *fileinfo );

     소속: io.h
     findfirst에 의해 발견된 파일의 다음 위치에 있는 파일을 찾아내게 
  됩니다. 파일이 없으면 -1값을 리턴합니다.

 

 */


    /* Find first .c file in current directory */
    
    if( ( hFile = _findfirst( "*.*", & c_file ) ) == -1L )
        printf( "No files in current directory!\n" );
    else
    {
        printf( "Listing of files\n\n" );
        printf( "\nRDO HID SYS ARC dir FILE DATE %25c SIZE\n", ' ' );
        printf( "--- --- --- --- --- ---- ---- %25c ----\n", ' ' );
        /* Find the rest of the .c files */
        do 
        {
            printf( ( c_file.attrib & _A_RDONLY ) ? " Y " : " N " );
            printf( ( c_file.attrib & _A_SYSTEM ) ? " Y " : " N " );
            printf( ( c_file.attrib & _A_HIDDEN ) ? " Y " : " N " );
            printf( ( c_file.attrib & _A_ARCH ) ? " Y " : " N " );
            printf( ( c_file.attrib & _A_SUBDIR ) ? " Y " : " N " );
            printf( " %-12s %.24s %9ld\n",
                c_file.name, ctime( &( c_file.time_write ) ), c_file.size );
        }while( _findnext( hFile, &c_file ) == 0 );
        _findclose( hFile );
    }

    getch();

}



출처:http://blog.naver.com/PostView.nhn?blogId=cap21c&logNo=150035398059&redirect=Dlog&widgetTypeCall=true

Posted by xiasonic