ディレクトリ内のファイル数を取得する方法

[戻る]
Who 2002/10/16(水) 15:51:29
指定したディレクトリ内のファイル数を
知る方法をどなたかご教授下さい。

Windows2000、VC++6.0、MFC不使用

アイススケーター 2002/10/16(水) 17:45:26
FindFirstFileを使って、*.*を検索し、ファイルの識別分をカウントすればOKです。

サブディレクトリの場合は、再起法を使ってサブディレクトリ分をさらに加算します。

Who 2002/10/16(水) 17:48:15
[[解決]]
了解です。

やってみます。

アイススケーター 2002/10/16(水) 19:01:22
ちなみに、昔作ったプログラムでTree表示するプログラムが下記です。
これは、FindFirstFileを使わず_findfirstと_findnextを使用しています。

#include <afxwin.h>
#include <io.h>
#include <direct.h>

BOOL    flgDir;
BOOL    flgTime;

void    PrintFileName(
    struct _finddata_t    *fileinfo,
    short                nCnt
)
{
    short    i;
    char    sBuf[256];
    char    sWk[80];

    struct    tm *newtime;

    memset( sBuf, 0, sizeof(sBuf) );

    if( flgTime == TRUE) {
        newtime = localtime( &fileinfo->time_write);
//        memset( sWk, ' ', sizeof(sWk) );
//        sWk[79 - strlen(sBuf) - 24] = 0;
//        printf( "%s", sWk);
        printf( "%02d/%02d/%02d %02d:%02d:%02d  ",
                newtime->tm_year % 100, newtime->tm_mon, 
newtime->tm_mday,
                newtime->tm_hour, newtime->tm_min, newtime-
>tm_sec);
    }
    for( i = 0; i < nCnt; i++) {
        if( ( i == 0) &&
            ( fileinfo->attrib == _A_SUBDIR) &&
            ( flgDir == TRUE) ) {
            printf( "d   ");
        } else {
            printf( "    ");
        }
    }
    printf( fileinfo->name);
    printf( "%s", sBuf);

    printf( "\n");
}

void    PrintTree(
    short    nNest
)
{
    long                hFile;
    struct _finddata_t    fileinfo;

    hFile = _findfirst( "*.*", &fileinfo );

    while( _findnext( hFile, &fileinfo ) == 0 ) {
        // 
        if( fileinfo.attrib == _A_SUBDIR ) {
            if( fileinfo.name[0] != '.') {
                PrintFileName( &fileinfo, nNest + 1);
                _chdir( fileinfo.name);
                PrintTree( nNest + 1);
                _chdir( "..");
            }
        } else {
            PrintFileName( &fileinfo, nNest + 1);
        }
    }
}

void    main(
    int        argc,
    char    *argv[]
)
{
    char    **p;
    char    *pDat;

    flgDir =  FALSE;
    flgTime =  FALSE;
    
    p = argv;
    if( argc > 1) {
        //
        while( *++p != 0) {
            pDat = *p;
            if( *pDat == '-') {
                if( ( *(pDat + 1) & 0xdf)  == 'D') {
                    flgDir =  TRUE;
                } else if( ( *(pDat + 1) & 0xdf)  == 'T') {
                    flgTime =  TRUE;
                }
            }
            pDat++;
        }
    }
    PrintTree( 0);
}

古いスレッドには追加発言できません。