MFC에서 FileDialog 를 사용할 때, OFN_ALLOWMULTISELECT flag를 사용하면 다중 파일 선택이 가능해진다. 이 경우, 파일을 읽어올 때에는 GetStartPosition을 이용하여 하나씩 읽어오게 되는데, 단일 파일일 때와 달리, FileName만 얻는 메소드가 존재하지 않는다.
이 때, 사용가능한 메소드로는 GetNextPathName()가 존재하는데 약간의 차이점은 이 메소드는 파일 경로를 포함하여 전체를 다 읽어온다는 것. 이를 해결하려면 String parsing을 하는 수 밖에 없다. 아래와 같이 Delete 함수를 사용하면 편리하다.
void CtistorycodeDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
CString str = _T("JAVA Script Files(*.js)|*.js|");
CFileDialog dlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT, str, this );
if ( dlg.DoModal() == IDOK )
{
POSITION pos = dlg.GetStartPosition();
m_FileList = "";
while (pos)
{
CString strFileName = dlg.GetNextPathName(pos);
strFileName.Delete( 0, strFileName.ReverseFind('\\')+1);
m_FileList += (strFileName+_T("\r\n"));
UpdateData(FALSE);
}
}
}