修改了GetFileToList函数里的逻辑。
#备用代码
void CApplicaction1Dlg::GetFileToList(CString szPath) {
int indexFrom, indexTo;
if (!((CButton *)GetDlgItem(IDC_ETC))->GetCheck()) {
if (((CButton *)GetDlgItem(IDC_WORD))->GetCheck()) {
indexFrom = 0;
indexTo = 1;
}
if (((CButton *)GetDlgItem(IDC_EXCEL))->GetCheck()) {
indexFrom = 2;
indexTo = 3;
}
if (((CButton *)GetDlgItem(IDC_PPT))->GetCheck()) {
indexFrom = 4;
indexTo = 5;
}
if (((CButton *)GetDlgItem(IDC_PDF))->GetCheck()) {
indexFrom = indexTo = 6;
}
}
else {
indexFrom = -1;
}
CFileFind finder; //查找文件夹里的全部数据
//建立CString对象,设置检索匹配字符串
CString strWildcard(szPath);
strWildcard += _T("\\*.*");
//文件内部检索
BOOL bWorking = finder.FindFile(strWildcard);
int i; //用于定位字符,作为下标
int index = 0; //用于列表索引
CString fontName, lastType, filepath, filename, filesize;//存储切割结果
while (bWorking)
{
bWorking = finder.FindNextFile(); //判断当前目录下是否有下一个目录或文件
filename = finder.GetFileName(); //获取到文件名字
if (!finder.IsDirectory()) //如果当前文件不是目录文件
{
filepath = finder.GetFilePath();//获取文件的全路径
i = filename.ReverseFind('.'); //从后往前查找.号
fontName = filename.Left(i); //从左边1开始获取前 i个字符
lastType = filename.Mid(i+1); //从左边第 i个字符开始,获取后面所有的字符
/*首先要知道List Control在显示为Report样式时,主项为第一项,后面紧跟着的为子项。主项和子项的数据写入不同*/
if (indexFrom != -1) {
for (int k = indexFrom; k <= indexTo; k++) {
if (lastType == fileStyle[k]) {
filePathVec.push_back(filepath); //将文件路径保存到vector容器
//在列表中显示
int nRow = pListCtr.InsertItem(index, fontName);
pListCtr.SetItemText(nRow, 1, lastType);
break;
}
}
}
else {
int k = 0;
for (k; k < 7; k++) {
if (!(lastType.Compare(fileStyle[k]))) { //若参与比较的两个串值相同,则函数返回 0
break;
}
}
if (k > 6) {
filePathVec.push_back(filepath); //将文件路径保存到vector容器
int nRow = pListCtr.InsertItem(index, fontName);
pListCtr.SetItemText(nRow, 1, lastType);
}
}
index++;
}
}
finder.Close();
}