VC/MFC 文件选择和文件夹选择,代码片段
1、批量选择文件
// 批量添加文件列表 void AddFile() { CString szFileName; CString szCount; POSITION pos; int i; int nCount=0; //文件数量 //输入文件 CFileDialog InFile( TRUE,NULL,NULL,OFN_FILEMUSTEXIST|OFN_ALLOWMULTISELECT,_T("某种格式|*.fmt|所有文件(*.*)|*.*||") ); InFile.m_ofn.nMaxFile = 10000; //文件上限 InFile.m_ofn.lpstrFile = (LPWSTR)malloc(InFile.m_ofn.nMaxFile*sizeof(TCHAR)); memset(InFile.m_ofn.lpstrFile,0,InFile.m_ofn.nMaxFile); //按了OK按钮,开始获取文件列表 if(InFile.DoModal() == IDOK) { pos=InFile.GetStartPosition(); while(pos) { szFileName=InFile.GetNextPathName(pos); //这里szFileName就是文件路径 //做点什么事情,比如添加到列表框 } } //释放空间 free(InFile.m_ofn.lpstrFile); }
2、选择文件夹
void SelectPath() { //选择输出路径 TCHAR szDir[MAX_PATH]; BROWSEINFO bi; ITEMIDLIST *pidl; bi.hwndOwner = this->m_hWnd; bi.pidlRoot = NULL; bi.pszDisplayName = szDir;//这个是输出缓冲区 bi.lpszTitle = _T("选择输出文件夹:"); //标题 bi.ulFlags = BIF_NEWDIALOGSTYLE;//使用新的界面,在win7中效果较好//BIF_RETURNONLYFSDIRS; bi.lpfn = NULL; bi.lParam = 0; bi.iImage = 0; pidl = SHBrowseForFolder(&bi);//弹出对话框 if (pidl == NULL)//点了取消,或者选择了无效的文件夹则返回NULL return; if(SHGetPathFromIDList(pidl, szDir)) szDir = szDir;//szDir就是要获取的文件夹 //得到之后做点什么 }