VS2010 使用 CFileDialog 选择文件
1、仅能选择单个文件
// TODO: Add your control notification handler code here
CFileDialog findFileDlg(TRUE, // TRUE是创建打开文件对话框,FALSE则创建的是保存文件对话框
".h264", // 默认的打开文件的类型
m_nowPlayFilePath, // 默认打开的文件名
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, // 打开只读文件
"视频文件(*.h264)|*.h264|所有文件 (*.*)|*.*||" // 所有可以打开的文件类型
);
// findFileDlg.GetOFN().lpstrInitialDir=strFile.c_str();// 默认目录
if(IDOK==findFileDlg.DoModal())
{
char tempBuff[1024];
int index=0, startPos=0, playTime, iSum, findFlag=0, iChn=0;
CString m_FilePath=findFileDlg.GetPathName(); // 取出文件路径
}
2、能选择多个文件
tempOpenDir=g_CurRunDir+"\\"; // g_CurRunDir为程序运行所在文件夹
TRACE("cur default open dir: %s\n", tempOpenDir);
// 打开选择文件的窗口并记录选定的文件
char *pFPBuff=NULL; // 文件路径存储空间
int nMaxFiles=32; // 最多运行选择的文件数目
CFileDialog findFileDlg(TRUE, // TRUE是创建打开文件对话框,FALSE则创建的是保存文件对话框
".bmp", // 默认的打开文件的类型
"", // 默认打开的文件名 tempOpenDir
OFN_ALLOWMULTISELECT|OFN_ENABLESIZING|OFN_HIDEREADONLY, // 打开只读文件 |OFN_OVERWRITEPROMPT
"BMP图片(*.bmp)|*.bmp|所有文件 (*.*)|*.*||" // 所有可以打开的文件类型
);
// 最多可以打开个文件
findFileDlg.m_ofn.nMaxFile=nMaxFiles*MAX_PATH; // 所选文件路径总长度最大值
pFPBuff=new TCHAR[findFileDlg.m_ofn.nMaxFile+16];
if (NULL==pFPBuff)
{
return;
}
else
{
// 对内存块清零
memset(pFPBuff, 0, sizeof(TCHAR)*findFileDlg.m_ofn.nMaxFile+16);
}
findFileDlg.m_ofn.lpstrFile=pFPBuff;
findFileDlg.m_ofn.lpstrTitle="打开文件";
findFileDlg.m_ofn.lpstrInitialDir=tempOpenDir.GetBuffer(0); // 设置默认路径
iRes=findFileDlg.DoModal();
if (IDOK==iRes)
{
// 获取第一个文件的位置
POSITION pos_file;
CString pathName, fileName;
pos_file = findFileDlg.GetStartPosition();
if (NULL==pos_file)
{
TRACE("On Bn Clicked Btn Add, pos file is NULL\n");
}
// 循环读出每个路径并存放在数组中
while(NULL!=pos_file)
{
// 获取文件路径和名称
pathName=findFileDlg.GetNextPathName(pos_file);
// 获取文件名
// 从字符串的后面往前遍历,如果遇到'\'则结束遍历,'\'右边的字符串则为文件名
int iIndex, length=pathName.GetLength();
for (iIndex=length-1; iIndex>0; iIndex--)
{
if ('\\'==pathName.GetAt(iIndex))
{
// 判断当前字符是否是'\'
fileName=pathName.Right(length-iIndex-1);
break; // 跳出循环
}
}
TRACE("cur sel file path: %s\n", pathName);
InsertSelFileIntoList(fileName, pathName);
}
}
else
{
TRACE("On Bn Clicked Btn Add, cancel btn is pressed, iRes: %d\n", iRes);
}
delete [] pFPBuff;
1、仅能选择单个文件
// TODO: Add your control notification handler code here
CFileDialog findFileDlg(TRUE, // TRUE是创建打开文件对话框,FALSE则创建的是保存文件对话框
".h264", // 默认的打开文件的类型
m_nowPlayFilePath, // 默认打开的文件名
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, // 打开只读文件
"视频文件(*.h264)|*.h264|所有文件 (*.*)|*.*||" // 所有可以打开的文件类型
);
// findFileDlg.GetOFN().lpstrInitialDir=strFile.c_str();// 默认目录
if(IDOK==findFileDlg.DoModal())
{
char tempBuff[1024];
int index=0, startPos=0, playTime, iSum, findFlag=0, iChn=0;
CString m_FilePath=findFileDlg.GetPathName(); // 取出文件路径
}
2、能选择多个文件
tempOpenDir=g_CurRunDir+"\\"; // g_CurRunDir为程序运行所在文件夹
TRACE("cur default open dir: %s\n", tempOpenDir);
// 打开选择文件的窗口并记录选定的文件
char *pFPBuff=NULL; // 文件路径存储空间
int nMaxFiles=32; // 最多运行选择的文件数目
CFileDialog findFileDlg(TRUE, // TRUE是创建打开文件对话框,FALSE则创建的是保存文件对话框
".bmp", // 默认的打开文件的类型
"", // 默认打开的文件名 tempOpenDir
OFN_ALLOWMULTISELECT|OFN_ENABLESIZING|OFN_HIDEREADONLY, // 打开只读文件 |OFN_OVERWRITEPROMPT
"BMP图片(*.bmp)|*.bmp|所有文件 (*.*)|*.*||" // 所有可以打开的文件类型
);
// 最多可以打开个文件
findFileDlg.m_ofn.nMaxFile=nMaxFiles*MAX_PATH; // 所选文件路径总长度最大值
pFPBuff=new TCHAR[findFileDlg.m_ofn.nMaxFile+16];
if (NULL==pFPBuff)
{
return;
}
else
{
// 对内存块清零
memset(pFPBuff, 0, sizeof(TCHAR)*findFileDlg.m_ofn.nMaxFile+16);
}
findFileDlg.m_ofn.lpstrFile=pFPBuff;
findFileDlg.m_ofn.lpstrTitle="打开文件";
findFileDlg.m_ofn.lpstrInitialDir=tempOpenDir.GetBuffer(0); // 设置默认路径
iRes=findFileDlg.DoModal();
if (IDOK==iRes)
{
// 获取第一个文件的位置
POSITION pos_file;
CString pathName, fileName;
pos_file = findFileDlg.GetStartPosition();
if (NULL==pos_file)
{
TRACE("On Bn Clicked Btn Add, pos file is NULL\n");
}
// 循环读出每个路径并存放在数组中
while(NULL!=pos_file)
{
// 获取文件路径和名称
pathName=findFileDlg.GetNextPathName(pos_file);
// 获取文件名
// 从字符串的后面往前遍历,如果遇到'\'则结束遍历,'\'右边的字符串则为文件名
int iIndex, length=pathName.GetLength();
for (iIndex=length-1; iIndex>0; iIndex--)
{
if ('\\'==pathName.GetAt(iIndex))
{
// 判断当前字符是否是'\'
fileName=pathName.Right(length-iIndex-1);
break; // 跳出循环
}
}
TRACE("cur sel file path: %s\n", pathName);
InsertSelFileIntoList(fileName, pathName);
}
}
else
{
TRACE("On Bn Clicked Btn Add, cancel btn is pressed, iRes: %d\n", iRes);
}
delete [] pFPBuff;