mfc獲取文件夾名
① MFC按鈕打開選擇一個文件夾,然後獲得文件夾中的所有txt文件名稱!
這個滿足你的要求
s返迴文件路徑
#define
DLG_FILTER
"ALL
Files
(*.*)|*.*||"
#define
DLG_EXT
"*
"
CFileDialog
dlg(TRUE,
_T(DLG_EXT),
NULL,
OFN_HIDEREADONLY
|
OFN_OVERWRITEPROMPT
|
OFN_ALLOWMULTISELECT,
_T(DLG_FILTER));
if
(dlg.DoModal()
==
IDOK)
{
POSITION
pos
=
dlg.GetStartPosition();
while
(pos
!=
0)
{
CString
s
=
dlg.GetNextPathName(pos);
}
}
下面代碼,可以選擇文件夾,會返迴文件夾的路徑
需要自己查找每個文件
char*
GetPath(HWND
hWnd,char*
pBuffer)
{
BROWSEINFO
bf;
LPITEMIDLIST
lpitem;
memset(&bf,0,sizeof
BROWSEINFO);
bf.hwndOwner=hWnd;
bf.lpszTitle=
"選擇路徑";
bf.ulFlags=BIF_RETURNONLYFSDIRS;
//屬性你可自己選擇
lpitem=SHBrowseForFolder(&bf);
if(lpitem==NULL)
//如果沒有選擇路徑則返回
0
return
0;
//如果選擇了路徑則復制路徑,返迴路徑長度
SHGetPathFromIDList(lpitem,pBuffer);
return
pBuffer;
}
② MFC獲取指定文件夾文件目錄
在MFC中,使用CFileFind類,可以枚舉一個目錄下的所有文件和子目錄。
示例:
voidListFolder(constCString&sPath)
{
CFileFindff;
BOOLbFound=ff.FindFile(sPath+"\*.*");
while(bFound)
{
bFound=ff.FindNextFile();
if(ff.IsDirectory())//是目錄
{
if(!ff.IsDots())//不是本級目錄或父目錄(.和..)
ListFolder(ff.GetFilePath());//遞歸子目錄
}
else
{
AfxMessageBox("文件:"+ff.GetFilePath());
}
}
ff.Close();
}
③ MFC中獲取文件名及路徑實現方法——DirDialog類中的BrowseCtrlCallback注釋翻譯
int__stdcallCDirDialog::BrowseCtrlCallback(HWNDhwnd,UINTuMsg,LPARAMlParam,LPARAMlpData)
{
//bInfo.lParam=(LPARAM)this;這行代碼將CDirDialog對象通過lpData傳入到回調函數BrowseCtrlCallback
CDirDialog*pDirDialogObj=(CDirDialog*)lpData;
//瀏覽目錄的對話框已初始化完成後會回調BrowseCtrlCallback,uMsg等於BFFM_INITIALIZED
if(uMsg==BFFM_INITIALIZED)
{
//如果指定了默認目錄,給hwnd(瀏覽目錄對話框)發送BFFM_SETSELECTION消息,用於自動選中該默認目錄
if(!pDirDialogObj->m_strSelDir.IsEmpty())
::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)(LPCTSTR)(pDirDialogObj->m_strSelDir));
//如果CDirDialog的m_strWindowTitle不是空字元串,那麼將瀏覽目錄對話框的窗口標題設置為m_strWindowTitle
if(!pDirDialogObj->m_strWindowTitle.IsEmpty())
::SetWindowText(hwnd,(LPCTSTR)pDirDialogObj->m_strWindowTitle);
}
//瀏覽目錄的對話框內用戶選擇的目錄變化時,回調BrowseCtrlCallback,uMsg等於BFFM_SELCHANGED
elseif(uMsg==BFFM_SELCHANGED)
{
//BFFM_SELCHANGED消息中,lpData指向新選擇的目錄的PIDL
LPITEMIDLISTpidl=(LPITEMIDLIST)lParam;
charselection[MAX_PATH];
//調用SHGetPathFromIDList從PIDL轉換為文件系統路徑字元串
if(!::SHGetPathFromIDList(pidl,selection))
selection[0]='