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);
}
}