TDirectoryを使ってコンソールのDIRのような出力を作成する:raised_hand:

TDirectory

ディレクトリ操作で使われるたくさんの静的ユーティリティ

利用したファンクション 機能
TDirectory::GetDirectories ディレクトリ名一覧取得
TDirectory::GetFiles ファイル名一蘭取得
TDirectory::Exists ディレクトの存在確認
TDirectory::GetCreationTime ディレクトリの作成日時

TFile

ファイル操作に使用する静的なユーティリティ

利用したファンクション 機能
TFile::Open ファイルを開く
TFile::GetCreationTime ファイルの作成日時

コード

umain_TDirectory.cpp
#include <vcl.h>
#include <windows.h>

#pragma hdrstop
#pragma argsused

#include <tchar.h>
#include <System.IOUtils.hpp>
#include <iostream>
#include <memory>

constexpr const wchar_t apath[] = L"c:\\embarcadero\\";
constexpr const wchar_t dt_fmt[] = L"yyyy/mm/dd hh:nn:ss";

template <typename T> void file_cout(AnsiString att, System::TStringDynArray arr, bool f = false)
{
     for (auto adir: arr)
     {
        AnsiString ls = StringReplace(adir,apath,"", TReplaceFlags()<<rfReplaceAll);
        try
        {
            if(f)
            {
                //TFile::Openして、 TFileStreamでファイルサイズを取得
                std::unique_ptr<TFileStream> lfs{TFile::Open(adir, TFileMode::fmOpen)};
                att = Format("\t%d\t", ARRAYOFCONST((lfs->Size)));
            }
            //GetCreationTime   作成時間を取得
            AnsiString stdate = FormatDateTime(dt_fmt, T::GetCreationTime(adir));
            //コンソールにSJIS出力する
            std::cout << stdate << att.c_str() << ls.c_str() << std::endl;
        }
        catch(Exception& ex1)
        {
            std::cout << ex1.Message.c_str() << std::endl;
        }
     }
}

int _tmain(int argc, _TCHAR* argv[])
{
    using namespace System::Ioutils;
    String lpath = argv[1];
    if (lpath.Length() == 0) lpath = apath;
    //TDirectory::Exists()  ディレクトリ存在確認
    if (TDirectory::Exists(lpath))
    {
        //TSearchOption::soAllDirectories   指定すると階層すべて調べる
        //GetDirectories    ディレクトリ内フォルダ一覧
        file_cout<TDirectory>("\t<DIR>\t", TDirectory::GetDirectories(lpath, "*.*", TSearchOption::soTopDirectoryOnly) );
        //GetFiles          ディレクトリ内ファイル一覧
        file_cout<TFile>("", TDirectory::GetFiles(lpath, "*.*", TSearchOption::soTopDirectoryOnly) ,true);
    }
    return 0;
}

結果:sunrise:

2018-01-161640.png

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.