VC 打开文件框选择文件

来源:互联网 发布:保定优化公司 编辑:程序博客网 时间:2024/06/07 00:23

VC中,选择文件的方法:

1. MFC下:

CFileDialog fDlg(TRUE, _T(".apk"), NULL, 
OFN_HIDEREADONLY | OFN_FORCESHOWHIDDEN | OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT, 
_T("Apk Files(*.apk)|*.apk|All Files(*.*)|*.*||"));


INT_PTR nResponse = fDlg.DoModal();
if (nResponse == IDOK)
{
CString strPath;
POSITION m_Position = fDlg.GetStartPosition();

while(m_Position != NULL)
{
strPath = fDlg.GetNextPathName(m_Position);
}
}


2. 比较原始的,但很好用,使用API:

OPENFILENAME ofn = {0};
TCHAR lpstrFilename[MAX_PATH * 20] = {0};

ofn.lStructSize= sizeof(OPENFILENAME);
ofn.hwndOwner = NULL; 
ofn.lpstrFilter= _T("Apk Files(*.apk)\0*.apk\0All Files(*.*)\0*.*\0\0"); 
ofn.lpstrFile = lpstrFilename;
ofn.nMaxFile = MAX_PATH * 20; 

ofn.lpstrInitialDir = TEXT("C:\..."); //初始化一个路径

ofn.Flags = OFN_HIDEREADONLY | OFN_FORCESHOWHIDDEN | OFN_PATHMUSTEXIST | OFN_EXPLORER | OFN_ALLOWMULTISELECT;


if (GetOpenFileName(&ofn)) 
{
TCHAR szDir[MAX_PATH]= {0};
TCHAR szName[128]= {0};
TCHAR szPath[MAX_PATH]= {0};
TCHAR *pos = lpstrFilename;

if (0 == lpstrFilename[_tcslen(lpstrFilename) + 1])// 只有一个文件
{
_tcscpy_s(szPath, MAX_PATH, lpstrFilename);
}
else
{
_tcscpy_s(szDir, MAX_PATH, lpstrFilename);
_tcscat_s(szDir, MAX_PATH, _T("\\"));

do 
{
pos = &pos[_tcslen(pos)] + 1;
if (0 == *pos)
break;

_tcscpy_s(szPath, MAX_PATH, szDir);
_tcscat_s(szPath, MAX_PATH, pos);

} while (1);
}
}