首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 人臉性別識別教程(8):MFC 框架讀取文件夾信息 — SHBrowseForFolder 與 dirent

     編輯:關於C++

準備工作

  1. 添加 OpenCV 頭文件、CvvImage.h/.cpp(OpenCV 1.x 遺留類,用於 Picture 控件繪圖)、dirent.h(目錄遍歷)。
  2. 在對話框類中添加成員變量:
    CString m_Path(選中路徑),
    char* m_ImageDir、DIR* m_pDir、struct dirent* m_pEnt(目錄遍歷上下文)。

「圖像文件夾」按鈕響應代碼

void CGenderRecognitionMFCDlg::OnBnClickedButtonImagefile() {
    // 1. 彈出文件夾選擇對話框
    BROWSEINFO bi = {0};
    TCHAR path[MAX_PATH];
    bi.hwndOwner = GetSafeHwnd();
    bi.pszDisplayName = path;
    bi.lpszTitle = _T("Select folder");
    bi.ulFlags = 0x80; // 新風格
    LPITEMIDLIST idl = SHBrowseForFolder(&bi);
    if (!idl) return;
    SHGetPathFromIDList(idl, m_Path.GetBuffer(MAX_PATH));
    m_Path.ReleaseBuffer();
    if (m_Path.Right(1) != "\\") m_Path += "\\";
    UpdateData(FALSE);

    // 2. 釋放 IDL 內存
    IMalloc* imalloc = nullptr;
    if (SUCCEEDED(SHGetMalloc(&imalloc))) {
        imalloc->Free(idl);
        imalloc->Release();
    }

    // 3. 打開目錄並跳過 "." 和 ".."
    m_ImageDir = (LPSTR)(LPCTSTR)m_Path;
    m_pDir = opendir(m_ImageDir);
    for (int i=0; i<2; ++i) m_pEnt = readdir(m_pDir); // 跳過 . 和 ..
}

關鍵點說明

  • SHBrowseForFolder 返回項目 ID 列表,需用 SHGetPathFromIDList 轉為路徑字符串。
  • opendir/readdir 來自 dirent.h,是 POSIX 接口的 Windows 移植版,方便跨平台。
  • 成員變量 m_pDir、m_pEnt 保存遍歷狀態,供下一步「下一張」使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved