Я хочу перечислить все мои файлы и папки (включая подпапки) и показать их в своем списке, поэтому я думаю о написании рекурсивной функции для их отображения. Но код работает хорошо, если я показываю все файлы и папки в папке выбора, но он не может сканировать в подпапках (он показывает только первую папку и не более). Пожалуйста, помогите мне узнать, что такое ошибка?Список всех файлов рекурсивно функционирует в MFC-ошибке?
Это моя функция (я добавляю его в мой класс диалогового окна)
void CFileListingDlg::ListFile(CString path)
{
CFileFind hFile;
BOOL bFound;
CString filePath;
bFound=hFile.FindFile(path+L"\\*.*");
while(bFound)
{
bFound=hFile.FindNextFile();
if(!hFile.IsDots())
{
m_lFiles.AddString(hFile.GetFilePath());
//It work well with selecting folder if I remove this line
//But it shows only first folder when I use it
if(hFile.IsDirectory()) ListFile(hFile.GetFilePath()+L"\\*.*");
}
}
}
И потом, я называю его, когда нажатие кнопки браузера с кодом
void CFileListingDlg::OnBnClickedBtnBrowse()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
CFolderPickerDialog folderDialog(_T("E:\\Test"));
if(folderDialog.DoModal()==IDOK)
{
m_eFolder.SetWindowText(folderDialog.GetPathName());
m_lFiles.ResetContent();
ListFile(folderDialog.GetPathName());
}
}
Предлагаю вам научиться использовать отладчик. –
Я не думаю, что вы должны добавлять '*. *' Как в вызов функции, так и в тело функции. –
Спасибо, Нил Баттерворт, я решаю его с вашим комментарием. – HuynhAT