这里用了全局变量,因为需要在两个函数中进行操作
vector<CString>subDirectory;//用于存储子文件夹的名字
vector<int>subFileNum;//用于存储子文件夹中的文件数目
void CFileSeparationDlg::OnBnClickedStatistic()
{
// TODO: 在此添加控件通知处理程序代码
CString m_path;
CString m_subPath;
//CStdioFile file;
CFile file;
CString subfileNum2;
vector<CString>vector;
int i = 0, j = 0;//j记录子文件夹的个数,i无用
int p = 0, q = 0;//p记录子文件夹中文件的个数,q无用
GetDlgItemText(IDC_EDIT2, m_path);
getNum(m_path, i, j);//第一个参数为目录路径
CString s;
//s.Format(_T("子文件夹个数:%d"),j);//输出格式化
for (int k = 0; k < j; k++)
{
m_subPath = m_path + '/'+subDirectory.at(k);//进入到子文件夹中
getNum(m_subPath, p, q);
subFileNum.push_back(p);
p = 0;q = 0;//计数完一个子文件夹中的文件数目,p,q归零,继续计数下一个子文件夹文件个数
}
file.Open(m_path + '/' + _T("PictureNum.txt"), CFile::modeCreate | CFile::modeReadWrite);
for (int w = 0; w < subDirectory.size(); w++)
{
subfileNum2.Format(_T("%d"), subFileNum.at(w));
WORD unicode = 0xFEFF; //这句重要,注意这里是F E FF,中间有个E
file.Write(&unicode, 2); //这句重要
//file.Write(subfileNum2.GetBuffer(), subfileNum2.GetLength());
file.Write(_T("文件夹"), wcslen(_T("文件夹")) * sizeof(wchar_t)); //这句重要
file.Write(subDirectory.at(w), wcslen(subDirectory.at(w)) * sizeof(wchar_t)); //这句重要
file.Write(_T("的图片数量为:"), wcslen(_T("的图片数量为:")) * sizeof(wchar_t)); //这句重要
file.Write(subfileNum2, wcslen(subfileNum2) * sizeof(wchar_t)); //这句重要
file.Write(_T("\r\n"),2);
}
file.Close();
MessageBox(_T("统计完成"));
}
void CFileSeparationDlg::getNum(CString path, int &i, int &j)
{
CFileFind find;
SetCurrentDirectory(path);//设置当前目录
bool ret = find.FindFile();
while (ret)
{
ret = find.FindNextFile();
if (find.IsDots())
continue;
else if (find.IsDirectory())//判断是目录
{
j++;
CString str=find.GetFileName();//获取文件夹的名字
//MessageBox(str);
subDirectory.push_back(str);
//getNum(path + '/' + (LPCTSTR)find.GetFileName(), i, j, vector);//递归寻找子目录
}
else i++;//文件数增加
}find.Close();//关闭find
SetCurrentDirectory(_T("E:\\"));//该函数会占用文件控制权,为避免冲突应将其设置为无关目录
}
把vector容器中的值写入txt花费了较多的时间,且遇到了CFile写入txt乱码的问题,用以下方法解决
WORD unicode = 0xFEFF; //这句重要,注意这里是F E FF,中间有个E
file.Write(&unicode, 2); //这句重要
//file.Write(subfileNum2.GetBuffer(), subfileNum2.GetLength());
file.Write(_T("文件夹"), wcslen(_T("文件夹")) * sizeof(wchar_t)); //这句重要
file.Write(subDirectory.at(w), wcslen(subDirectory.at(w)) * sizeof(wchar_t)); //这句重要
file.Write(_T("的图片数量为:"), wcslen(_T("的图片数量为:")) * sizeof(wchar_t)); //这句重要
file.Write(subfileNum2, wcslen(subfileNum2) * sizeof(wchar_t)); //这句重要
file.Write(_T("\r\n"),2);//换行
CFile换行
file.Write(_T("\r\n"),2);//换行
结果
虽然花了一下午的时间,但是还是有所成就吧,继续加油。