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]='