怎么用CFileDialog 选择文件夹

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用CFileDialog 选择文件夹相关的知识,希望对你有一定的参考价值。

CString BrowseFolder(HWND hWnd, LPCTSTR lpTitle)


char szPath[MAX_PATH]=0;
BROWSEINFO m_bi;

m_bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
m_bi.hwndOwner = hWnd;
m_bi.pidlRoot = NULL;
m_bi.lpszTitle = lpTitle;
m_bi.lpfn = NULL;
m_bi.lParam = NULL;
m_bi.pszDisplayName = szPath;

LPITEMIDLIST pidl = ::SHBrowseForFolder( &m_bi );
if ( pidl )

if( !::SHGetPathFromIDList ( pidl, szPath ) ) szPath[0]=0;

IMalloc * pMalloc = NULL;
if ( SUCCEEDED ( ::SHGetMalloc( &pMalloc ) ) ) // 取得IMalloc分配器接口

pMalloc->Free( pidl ); // 释放内存
pMalloc->Release(); // 释放接口


return szPath;

=============================================================
调用
void CFlorderDlg::OnButton1()

// TODO: Add your control notification handler code here
CString SelectPath=BrowseFolder(this->m_hWnd,"选择目录");
AfxMessageBox(SelectPath);

用户在磁盘上寻找文件时,所历经的文件夹线路叫路径。路径分为绝对路径和相对路径。
1】绝对路径:从根文件夹开始的路径,以“\\”作为开始。
2】相对路径:从当前文件夹开始的路径。
DOS程序命令中:d代表盘符 p代表路径 0(零)代表文件本身,%~dp0就是文件所在的完整路径

Windows应用中文件夹路径就是当打开文件夹时地址栏显示的信息,如
H:\\Downloads\\Game代表的就是Game文件夹的完整路径
参考技术A 不能用CFileDialog

用::SHBrowseForFolder才行

例子:
C/C++ code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BROWSEINFO bi;
bi.hwndOwner=NULL;
bi.pidlRoot=NULL;
bi.pszDisplayName=NULL;
bi.lpszTitle=NULL;
bi.ulFlags=0;
bi.lpfn =NULL;
bi.iImage =0;
LPCITEMIDLIST pidl=SHBrowseForFolder(&bi);
if(!pidl)
return;
TCHAR szDisplayName[255];
SHGetPathFromIDList(pidl,szDisplayName);
CString str(szDisplayName);本回答被提问者和网友采纳

CFileDialog类实现文件夹路径的获取

选择文件夹,是用CFileDialog类吗?回答的好加分
请看清楚图片和问题再回答,谢谢

是的,
CFileDialog pCFileDialog(true,NULL,NULL,0,"文本文件(*.txt)|*.txt");
//CFileDialog pCFileDialog最后一个参数是打开文件对话框的筛选器内容,不是文件路径
pCFileDialog.m_ofn.lpstrTitle = "打开文件 ";
char pbuf[1024];
memset(pbuf,0,1024);
if(pCFileDialog.DoModal()==IDOK)

CFile filename(pCFileDialog.GetFileName(),CFile::modeRead);
filename.Read(pbuf,1024);
MessageBox(pbuf);
filename.Close;
参考技术A http://hi.baidu.com/lucifer_mike/blog/item/16961bef0bce3be3ce1b3ef9.html

CString sFolderPath;

BROWSEINFO bi;

char Buffer[MAX_PATH];

//初始化入口参数bi开始

bi.hwndOwner = NULL;

bi.pidlRoot =NULL;//初始化制定的root目录很不容易,

bi.pszDisplayName = Buffer;//此参数如为NULL则不能显示对话框

bi.lpszTitle = "修改接收路径";

//bi.ulFlags = BIF_BROWSEINCLUDEFILES;//包括文件

bi.ulFlags = BIF_EDITBOX;//包括文件

bi.lpfn = NULL;

bi.iImage=IDR_MAINFRAME;

//初始化入口参数bi结束

LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);//调用显示选择对话框

if(pIDList)



SHGetPathFromIDList(pIDList, Buffer);

//取得文件夹路径到Buffer里

sFolderPath = Buffer;//将文件夹路径保存在一个CString对象里



LPMALLOC lpMalloc;

if(FAILED(SHGetMalloc(&lpMalloc)))

return;

lpMalloc->Free(pIDList);

lpMalloc->Release();

MessageBox(sFolderPath,"Title",MB_OK);

参考资料:http://hi.baidu.com/lucifer_mike/blog/item/16961bef0bce3be3ce1b3ef9.html

本回答被提问者和网友采纳
参考技术B VC6的实现不了

以上是关于怎么用CFileDialog 选择文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何让CFileDialog同时选择文件和文件夹

VC6.0中CFileDialog怎么选择多个文件?

MFC中CFileDialog使用方法

使用 CFileDialog 选择文件时的绘画问题

如何在 MFC 中使用 CfileDialog 选择特定文件

MFC CFileDialog 只打开选择文件