打开、另存单个文件:
CString sFileFilter("所有文件|*.*|文本文件|*.txt;*.ini||");
//指明可供选择的文件类型和相应的扩展名;文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
CFileDialog fDlg(true, //为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。
NULL, //指定默认的文件扩展名
NULL, //指定默认的文件名
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, //指明一些特定风格。
sFileFilter,
NULL); //父窗口指针。
if(fDlg.DoModal()==IDOK&&fDlg.GetPathName()!="") //文件名不为空
{
sFileName=fDlg.GetPathName(); //获取文件名称
}
打开多个文件:
CString filePaths[2048]; //存放文件完整路径
CString fileNames[2048]; //存放文件名称
CFileDialog ofDlg(true, //为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。
NULL, //指定默认的文件扩展名
NULL, //指定默认的文件名
OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT, //指明一些特定风格。
_T("所有文件|*.*|文本文件|*.txt;*.ini||"),
//指明可供选择的文件类型和相应的扩展名;文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
0); //父窗口指针。
char *pszName = new char[1240]; //保存文件路径的缓存区域,可调节大小
memset(pszName,'\0',1240); //初始化缓冲区
ofDlg.m_ofn.lpstrFile=pszName; //注意lpstrFile和nMaxFile。
ofDlg.m_ofn.lpstrFile[0]=NULL;
ofDlg.m_ofn.nMaxFile=1240;
ofDlg.m_ofn.lpstrTitle=_T("选择文件");
int i=0;
if(IDOK==ofDlg.DoModal())
{
POSITION pos=ofDlg.GetStartPosition(); //返回文件名列表的第一个元素位置
while(pos)
{
//获取文件完整路径,保存到数组中
filePaths[i]=ofDlg.GetNextPathName(pos); //返回下一个选定文件的完整路径
//截取文件名,保存到数组中
for(int k=filePaths[i].GetLength();k>0;k--){
if(filePaths[i].GetAt(k)=='\\'){
fileNames[i]=filePaths[i].Right(filePaths[i].GetLength()-k-1);
break;
}
}
//处理路径
filePaths[i].Replace("\\","\\\\");
i++;
}
delete[] pszName;
选取文件保存路径:
BROWSEINFO bi;
TCHAR path[MAX_PATH];
ITEMIDLIST *pidl;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = 0;
bi.pszDisplayName = path;
bi.lpszTitle =_T("请选择另存目录");
bi.ulFlags = BIF_RETURNONLYFSDIRS|BIF_EDITBOX|BIF_DONTGOBELOWDOMAIN;
bi.lpfn = 0;
bi.lParam = 0;
bi.iImage = 0;
if(pidl = SHBrowseForFolder(&bi))
{
SHGetPathFromIDList(pidl,path);
}
CString saveFilePath = path;
saveFilePath.Format(_T("%s"),path);
saveFilePath.Replace("\\","\\\\");
saveFilePath+="\\\\";
备注:
在选取多个文件的路径时,文件路径保存缓冲区的大小和文件名称长度仍然导致文件个数限制;调整缓存区太大导致内存不足!