CString
m_FileDir
BROWSEINFO
bi
ZeroMemory(&bi,
sizeof(BROWSEINFO))
bi.hwndOwner
=
m_hWnd
bi.ulFlags
=
BIF_RETURNONLYFSDIRS
LPITEMIDLIST
pidl
=
SHBrowseForFolder(&bi)
BOOL
bRet
=
FALSE
TCHAR
szFolder[MAX_PATH*2]
szFolder[0]
=
_T('')
if
(pidl)
{
if
(SHGetPathFromIDList(pidl,
szFolder))
bRet
=
TRUE
IMalloc
*pMalloc
=
NULL
if
(SUCCEEDED(SHGetMalloc(&pMalloc))
&&
pMalloc)
{
pMalloc->Free(pidl)
pMalloc->Release()
}
}
m_FileDir
=
szFolder//选择的文件夹路径
查找所有MDB文件(记录数组自己写吧)
CFileFind
ff
BOOL
res
=
ff.FindFile(m_FileDir+"*.mdb")
while(res)
{
res
=
ff.FindNextFile()
//不遍历子目录
if(!ff.IsDirectory()
&&
!ff.IsDots())
{
CString
strFile
=
ff.GetFileName()
…//
在这里写需要的代码
}
}
ff.Close()
//
不要忘记关闭
今天写一个程序,其中一个功能是用对话框来选择一个文件夹的路径。可是以前常用的CFileDialog必须指定到文件,选择一个文件夹只能继续打开而不能返回这个路径,CFileDialog貌视也没有参数可以弄成选择文件夹的式样。上网找了找,CSDN里有人提供下面这个函数的用法:CString
ShowSelectDirectoryDlg(const
CString
&
strDlgTitle)
{
char
szDir[MAX_PATH]
BROWSEINFO
bi
ITEMIDLIST
*pidl
bi.hwndOwner
=
this->m_hWnd
bi.pidlRoot
=
NULL
bi.pszDisplayName
=
szDir
bi.lpszTitle
=
strDlgTitle
bi.ulFlags
=
BIF_RETURNONLYFSDIRS
bi.lpfn
=
NULL
bi.lParam
=
0
bi.iImage
=
0
pidl
=
SHBrowseForFolder(&bi)
if(pidl
==
NULL)
return
_T()
if(!SHGetPathFromIDList(pidl,
szDir))
return
_T()
这个函数的传入参数strDlgTitle,就是选择文件夹对话框的标题栏名称。只需要模拟这个函数的写法,添加代码到特定的消息响应函数里去就可以了。
这个满足你的要求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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)