c++ builder XE4, 10.2 Tokyo > fileIO > 지정된 폴더의 하위 폴더에 파일이 있는지 확인. 그렇다면 path를 반환합니다.

동작 확인
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2018/01/09)

모든 폴더의 하위 폴더에있는 파일까지의 경로를 얻고 싶습니다.

ぃ tp // m / 7, f9 / ms / cb92, a2, d0, d73 a fb069
에서 하고 있던 것에 가깝지만, 파일 패턴(*.csv등)이 아니고, 파일 그 자체를 지정한다.

코드



UtilFolderSearch.h
//---------------------------------------------------------------------------

#ifndef UtilFolderSearchH
#define UtilFolderSearchH

//---------------------------------------------------------------------------

/*
ファイルをサブフォルダ含めて検索する
*/

class CUtilFolderSearch {
private:

public:
    static String __fastcall CUtilFolderSearch::SearchFileInSubDir(String baseDir, String filename);

    // テスト用
    static String __fastcall CUtilFolderSearch::Test_SearchFileInSubDir();
};

#endif

UtilFolderSearch.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <IOUtils.hpp> // for TDirectory.XXX
#include "UtilFolderSearch.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)

#define DEBUG_DO_PRINT // デバッグ出力

/*
v0.1 2016/01/10
    - Test_SearchFileInSubDir()追加
    - SearchFileInSubDir()追加
    - debug_outputDebugString()追加
*/

static void debug_outputDebugString(String prefix, String msg)
{
    // あとでまとめてデバッグ出力をコメントアウトするため、関数にしている。

#ifdef DEBUG_DO_PRINT
    String work = L"UtilFolderSearch >" + prefix + L": " + msg;
    OutputDebugString(work.c_str()); // @ debug_outputDebugString
#endif
}

/* static*/String __fastcall CUtilFolderSearch::SearchFileInSubDir(String baseDir, String filename)
{
    if (baseDir.Length() == 0) {
        return L"";
    }

    TStringDynArray fileList;
    TSearchOption option = TSearchOption::soAllDirectories; // all folders

    fileList = TDirectory::GetFiles(baseDir, /* pattern=*/filename, option);

    String res;
    if (fileList.Length == 0) {
        return L"";
    }

    return fileList[0];
}

/*static*/String __fastcall CUtilFolderSearch::Test_SearchFileInSubDir()
{
    String baseDir = L"C:\\Program Files\\Windows NT";
    String filename = L"wordpad.exe";
    String filepath;

    filepath = SearchFileInSubDir(baseDir, filename);

    String msg;
    if (filepath.Length() > 0) {
        msg = L"Line63 > Found:" + filepath;
    } else {
        msg = L"Line63 > Not found";
    }
    debug_outputDebugString(L"Test_SearchFileInSubDir", msg);
}

실행 예



CUtilFolderSearch::Test_SearchFileInSubDir()를 실행하여 테스트 동작을 확인할 수 있다.

예로서 워드패드를 검색해 보았다.

(YUML에서는 원 마크가 잘 표시되지 않는 것 같습니다) 디버그 출력: UtilFolderSearch >Test_SearchFileInSubDir: Line56 > Found:C:\Program Files\Windows NT\Accessories\wordpad.exe 프로세스 Project1.exe (2532)

좋은 웹페이지 즐겨찾기