VC 浏览本地文件夹、文件
今天,又看了这些东西,在VC里面创建浏览文件对话框比创建浏览文件夹对话框要简单一些。
一、创建“浏览文件对话框”
用CFileDialog类实现,比如:
CFileDialog FDlg(TRUE , ".doc" , NULL , OFN_HIDEREADONLY , "word文件(*.doc)|*.doc|所有文件(*.*) |*.*||" );
if(FDlg.DoModal() == IDOK)
{
filePath = FDlg.GetPathName();考教师资格证的条件
UpdateData(false);
filePath.Replace("\\","\\\\");
达科塔 高尤}
CFileDialog文件选择对话框的使用:
首先构造一个对象并提供相应的参数,构造函数原型如下:
CFileDialog::CFileDialog(
BOOL bOpenFileDialog, //为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框
LPCTSTR lpszDefExt = NULL, //默认的文件扩展名
LPCTSTR lpszFileName = NULL, //默认的文件名
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, //设定风格
汤姆逊-烈龙LPCTSTR lpszFilter = NULL, //列出可供选择的文件类型和相应的扩展名
CWnd* pParentWnd = NULL //父窗口句柄指针
);
LPCTSTR lpszFilter 参数格式如:"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xl
c;*.xls)|*.xlc;*.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
创建文件对话框可以使用DoModal(),在返回后可以利用下面的函数得到用户选择:
CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c:\
CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:
二、创建“浏览文件夹的对话框”
这个没办法用CFileDialog类来实现了,可以用回调函数,如下:
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);
三、创建可以多选的“浏览文件对话框”
使用CFileDialog类并设置OFN_ALLOWMULTISELECT标志,OPENFILENAME结构体的lpstrFile成员是一个指向用户申请分配的缓冲区,里面接受所选的路径和文件名列表,这个列表的每一项由一个NULL隔开,最末以两个NULL结束。nMaxFile成员指明了缓冲区的大小,如果所选择的文件名的加起来的总长度超过了此值,则DoModal函数返回IDCANCEL,如果用户试图打开超过缓冲区大小的文件集的话,CommDlgExtendedError()将返回FNERR_BUFFERTOOSMALL,这时候,lpstrFile的前两个byte将会包含实际需要的缓冲区的字节数。 
如果是在Windows  NT  4.0下,能被拷贝到lpstrFile缓冲区的字节数被限制在2562字节以内,如果超过将被截断。 
以下是一个使用该类进行多文件名选择的例子:  关于梦想的句子
#include  "cderr.h"  //for  definition  of  FNERR_BUFFERTOOSMALL 
CFileDialog      dlg(  TRUE,  NULL,  NULL,  OFN_ALLOWMULTISELECT,  NULL,  NULL  ); 
DWORD  MAXFILE  =  4000 ;
dlg.m_ofn.nMaxFile  =  MAXFILE; 
char*  pc  =  new  char[MAXFILE]; 
dlg.m_ofn.lpstrFile  =  pc; 
dlg.m_ofn.lpstrFile[0]  =  NULL; 
int  iReturn  =  dlg.DoModal(); 
if(iReturn  ==    IDOK) 
int  nCount  =  0; 
POSITION  pos  =  dlg.GetStartPosition(); 
CString FileName;
while  (pos  !=  NULL) 
FileName = dlg.GetNextPathName(pos); 
AfxMessageBox(FileName); //显示所选的多个文件的路径
nCount++;  //记录所选文件的数目
学前教育就业方向及前景
CString  str; 
str.Format("Successfully  opened  %d  files\n",  nCount); 
AfxMessageBox(str); 
else  if(iReturn  ==  IDCANCEL) 
AfxMessageBox("Cancel"); 
if(CommDlgExtendedError()  ==  FNERR_BUFFERTOOSMALL) 
AfxMessageBox("BUFFERTOOSMALL"); 
delete  [] pc;