サンプル集  >  VC  >  ディレクトリ情報取得
ディレクトリ情報取得
2010/01/16

ディレクトリ情報を取得します。

◆環境
OS Windows XP Professional Version 2002 Service Pack 3
VC Microsoft Visual C++ 2008 91179-136-7480673-60943

引数で指定したディレクトリ配下のフォルダとファイルをタブ区切りで出力します。 引数を省略した場合、実行時のカレントフォルダを基点にします。

dirlist.cpp
  1: 
  2: 
  3: 
  4: 
  5: 
  6: 
  7: 
  8: 
  9: 
 10: 
 11: 
 12: 
 13: 
 14: 
 15: 
 16: 
 17: 
 18: 
 19: 
 20: 
 21: 
 22: 
 23: 
 24: 
 25: 
 26: 
 27: 
 28: 
 29: 
 30: 
 31: 
 32: 
 33: 
 34: 
 35: 
 36: 
 37: 
 38: 
 39: 
 40: 
 41: 
 42: 
 43: 
 44: 
 45: 
 46: 
 47: 
 48: 
 49: 
 50: 
 51: 
 52: 
 53: 
 54: 
 55: 
 56: 
 57: 
 58: 
 59: 
 60: 
 61: 
 62: 
 63: 
 64: 
 65: 
 66: 
 67: 
 68: 
 69: 
 70: 
 71: 
 72: 
 73: 
 74: 
 75: 
 76: 
 77: 
 78: 
 79: 
 80: 
 81: 
 82: 
 83: 
 84: 
 85: 
 86: 
 87: 
 88: 
 89: 
 90: 
 91: 
 92: 
 93: 
 94: 
 95: 
 96: 
 97: 
 98: 
 99: 
100: 
101: 
102: 
103: 
104: 
105: 
106: 
107: 
108: 
109: 
110: 
111: 
112: 
113: 
114: 
115: 
116: 
117: 
118: 
119: 
120: 
121: 
122: 
123: 
124: 
125: 
126: 
127: 
128: 
129: 
130: 
131: 
132: 
133: 
134: 
135: 
136: 
137: 
138: 
139: 
// dirlist.cpp : コンソール アプリケーションのエントリ
// ポイントを定義します。
//

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <locale.h>

#define VERSION "1.0"

void ShowDirectory ( LPCTSTR pDirName );

int _tmain( int argc, _TCHAR* argv[] )
{
    wchar_t pStartDir[1024];

    setlocale( LC_ALL, "JPN" );

    if ( argc < 2 )
    {
        // 引数が指定されなかった場合
        // 実行時のディレクトリ配下を表示する。
        wcscpy_s( pStartDir, sizeof( pStartDir ), L".\\" );
    }
    else
    {
        if ( wcscmp( argv[1], L"-v" ) == 0 )
        {
            printf( "Version %s", VERSION );
            return 0;
        }
        wcscpy_s( pStartDir, sizeof( pStartDir ), argv[1] );
    }

    printf( "パス\tファイル名" );
    printf( "\t作成日時\t最終更新日時\t実サイズ\n" );
    ShowDirectory( pStartDir );

    return 0;
}

void ShowDirectory( LPCTSTR pDirName )
{
    HANDLE dno;
    WIN32_FIND_DATA fil;

    wchar_t pFind[1024];
    wsprintf( pFind, L"%s\\*", pDirName );

    dno = FindFirstFile( pFind, &fil );
    if ( dno != INVALID_HANDLE_VALUE )
    {
        BOOL ret = true;
        while( true )
        {
            if ( ( ( wcscmp( L".",  fil.cFileName ) == 0 )
                && ( fil.dwFileAttributes
                  == FILE_ATTRIBUTE_DIRECTORY )
                 )
            ||   ( ( wcscmp( L"..", fil.cFileName ) == 0 )
                && ( fil.dwFileAttributes
                  == FILE_ATTRIBUTE_DIRECTORY )
                 )
            )
            {
                ;
            }
            else
            {
                wprintf( L"%s", pDirName );
                if ( fil.dwFileAttributes
                  == FILE_ATTRIBUTE_DIRECTORY
                )
                {
                    printf( "\t<DIR>\n" );
                    wsprintf( pFind
                            , L"%s\\%s"
                            , pDirName
                            , fil.cFileName
                            );
                    ShowDirectory( pFind );
                }
                else
                {
                    wprintf( L"\t%s", fil.cFileName );

                    SYSTEMTIME TimeBuf ;

                    // 作成日時
                    FileTimeToSystemTime( &fil.ftCreationTime
                                        , &TimeBuf
                                        );
                    printf( "\t%04d/%02d/%02d %02d:%02d:%02d"
                          , TimeBuf.wYear
                          , TimeBuf.wMonth
                          , TimeBuf.wDay
                          , TimeBuf.wHour
                          , TimeBuf.wMinute
                          , TimeBuf.wSecond
                          );

                    // 最終更新日時
                    FileTimeToSystemTime( &fil.ftLastWriteTime
                                        , &TimeBuf
                                        );
                    printf( "\t%04d/%02d/%02d %02d:%02d:%02d"
                          , TimeBuf.wYear
                          , TimeBuf.wMonth
                          , TimeBuf.wDay
                          , TimeBuf.wHour
                          , TimeBuf.wMinute
                          , TimeBuf.wSecond
                          );

                    // ファイルサイズ
                    INT64 iFileSize = 0;
                    iFileSize = iFileSize
                              | ( fil.nFileSizeHigh << 4 )
                              | fil.nFileSizeLow;
                    printf( "\t%ld", iFileSize );

                    printf( "\n" );
                }
            }

            ret = FindNextFile( dno, &fil );
            if ( ! ret )
            {
                break;
            }
        }
    }
    else
    {
        printf( "INVALID_HANDLE_VALUE\n" );
    }
    FindClose( dno );
}

まずは引数を省略して実行してみます。

>dirlist.exe
パス    ファイル名      作成日時        最終更新日時    実サイズ
.\      dirlist.exe     2012/01/16 02:41:26     2012/01/16 02:37:39    
 7168

引数に..を指定して実行してみます。

>dirlist.exe ..
パス    ファイル名      作成日時        最終更新日時    実サイズ
..      copyResource.bat        2012/01/16 01:59:07     2012/01/16 01:5
9:39     1303
..      <DIR>
..\exe  dirlist.exe     2012/01/16 02:41:26     2012/01/16 02:37:39    
 7168
..      makeHTML.bat    2012/01/16 01:59:07     2012/01/16 02:00:03    
 1014
..      <DIR>
..\src  <DIR>
..\src\dirlist  <DIR>
..\src\dirlist\dirlist  dirlist.cpp     2012/01/16 02:38:12     2011/04
/21 02:03:48     3979
..\src\dirlist\dirlist  dirlist.vcproj  2012/01/16 02:38:12     2011/04
/20 05:06:24     4519
..\src\dirlist\dirlist  dirlist.vcproj.VIRTUALXP-28481.XPMUser.user    
 2012/01/16 02:38:12     2011/04/21 02:33:20     1430
..\src\dirlist\dirlist  dirlist.vcproj.VIRTUALXP-76934.XPMUser.user    
 2012/01/16 02:38:12     2012/01/16 02:38:07     1430
..\src\dirlist\dirlist  ReadMe.txt      2012/01/16 02:38:12     2011/04
/20 05:06:24     1360
..\src\dirlist\dirlist  stdafx.cpp      2012/01/16 02:38:12     2011/04
/20 05:06:24     289
..\src\dirlist\dirlist  stdafx.h        2012/01/16 02:38:12     2011/04
/20 05:06:24     411
..\src\dirlist  dirlist.sln     2012/01/16 02:38:12     2011/04/20 05:0
6:24     886
..\src\dirlist  dirlist.suo     2012/01/16 02:38:12     2012/01/16 02:3
8:07     9216
..      YMWVC480.html   2012/01/16 02:01:45     2012/01/16 02:18:32    
 6940
..      YMWVC480.txt    2012/01/16 01:59:07     2012/01/16 02:05:12    
 4611

▲ PageTop  ■ Home


Copyright (C) 2012 ymlib.com