用这段代码,读取指定文件夹内的文件,需要把第几行的代码改为路径 本人超级新手 是把8, 23, 31这几行改为文件夹路径吗?可是我这样改完以后,点击生成界面的按钮出现错误信息“exe遇到问题需要关闭,深感抱歉” 我的文件夹路径写的是"E:\\200" 看看有什么问题1
2 void CFileSearchDlg::TraverseFolder( const CString& strDir,std::vector<CString>& vecFile )
3 {
4 WIN32_FIND_DATA FindFileData;
5
6 CString strDirTmp;
7 strDirTmp = strDir;
8 strDirTmp += "\\*.*";
9
10 HANDLE hFind=::FindFirstFile(strDirTmp,&FindFileData);
11 if(INVALID_HANDLE_VALUE == hFind)
12 {
13 return;
14 }
15
16 while(TRUE)
17 {
18 if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
19 {
20 if(FindFileData.cFileName[0]!= _T('.'))
21 {
22 strDirTmp = strDir;
23 strDirTmp += "\\";
24 strDirTmp += FindFileData.cFileName;
25 TraverseFolder(strDirTmp,vecFile) ;
26 }
27 }
28 else
29 {
30 strDirTmp = strDir;
31 strDirTmp += "\\";
32 strDirTmp += FindFileData.cFileName;
33 vecFile.push_back(strDirTmp);
34 }
35 if(!FindNextFile(hFind,&FindFileData)) break;
36 }
37 FindClose(hFind);
38
39 }
2 void CFileSearchDlg::TraverseFolder( const CString& strDir,std::vector<CString>& vecFile )
3 {
4 WIN32_FIND_DATA FindFileData;
5
6 CString strDirTmp;
7 strDirTmp = strDir;
8 strDirTmp += "\\*.*";
9
10 HANDLE hFind=::FindFirstFile(strDirTmp,&FindFileData);
11 if(INVALID_HANDLE_VALUE == hFind)
12 {
13 return;
14 }
15
16 while(TRUE)
17 {
18 if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
19 {
20 if(FindFileData.cFileName[0]!= _T('.'))
21 {
22 strDirTmp = strDir;
23 strDirTmp += "\\";
24 strDirTmp += FindFileData.cFileName;
25 TraverseFolder(strDirTmp,vecFile) ;
26 }
27 }
28 else
29 {
30 strDirTmp = strDir;
31 strDirTmp += "\\";
32 strDirTmp += FindFileData.cFileName;
33 vecFile.push_back(strDirTmp);
34 }
35 if(!FindNextFile(hFind,&FindFileData)) break;
36 }
37 FindClose(hFind);
38
39 }
CString strPath=“E:\\200”;
调用那个函数的时候把strPath作为参数传入或者你也可以通过CFileDialog找到你需要的路径,然后传入
"所有文件(*.*)", NULL/*AfxGetMainWnd()*/);
if(mFileDlg.DoModal()==IDOK)
{
m_strPathName=mFileDlg.GetPathName();
m_strFileName=mFileDlg.GetFileName();
}
我现在着急用,真的是太感谢您了
其他的你自己查MSDN吧
"所有文件(*.*)|*.*", NULL/*AfxGetMainWnd()*/); if(mFileDlg.DoModal()==IDOK)
{
CString strPathName=mFileDlg.GetPathName();
CString strDir = strPathName.Left(strPathName.ReverseFind('\\'));
std::vector<CString> vecFile;
TraverseFolder( strDir,vecFile );
}
实在是太谢谢您了,这两段代码可以结合运行了,可是点完浏览框的打开按钮之后 再点击上面的叉号关闭就会出现“exe遇到问题需要关闭,深感抱歉的字样” 不知道为何
另外我还想处理读取到的文件,是不是在响应函数某尾 把vector内的元素倒出来处理就行了?这是结合完的响应函数:
void CTestDlg::OnTraverseFolder(const CString& strDir, vector<CString>& vecFile)
{
// TODO: Add your control notification handler code hereCFileDialog mFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
"所有文件(*.*)|*.*", NULL/*AfxGetMainWnd()*/); if(mFileDlg.DoModal()==IDOK)
{
CString strPathName=mFileDlg.GetPathName();
CString strDir = strPathName.Left(strPathName.ReverseFind('\\'));
std::vector<CString> vecFile;
OnTraverseFolder( strDir,vecFile );
}
WIN32_FIND_DATA FindFileData;
CString strDirTmp;
strDirTmp = strDir;
strDirTmp += "\\*.*";
HANDLE hFind=::FindFirstFile(strDirTmp,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind)
{
return;
}
while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(FindFileData.cFileName[0]!= _T('.'))
{
strDirTmp = strDir;
strDirTmp += "\\";
strDirTmp += FindFileData.cFileName;
OnTraverseFolder(strDirTmp,vecFile) ;
}
}
else
{
strDirTmp = strDir;
strDirTmp += "\\";
strDirTmp += FindFileData.cFileName;
vecFile.push_back(strDirTmp);
}
if(!FindNextFile(hFind,&FindFileData)) break;
}
FindClose(hFind);
}
{ CFileDialog mFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
"所有文件(*.*)|*.*", NULL/*AfxGetMainWnd()*/);
if(mFileDlg.DoModal()==IDOK)
{
CString strPathName=mFileDlg.GetPathName();
CString strDir = strPathName.Left(strPathName.ReverseFind('\\'));
std::vector<CString> vecFile;
OnTraverseFolder( strDir,vecFile );
} void CTestDlg::OnTraverseFolder(const CString& strDir,std::vector<CString>& vecFile)
{
WIN32_FIND_DATA FindFileData;
CString strDirTmp;
strDirTmp = strDir;
strDirTmp += "\\*.*";
HANDLE hFind=::FindFirstFile(strDirTmp,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind)
{
return;
}
while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(FindFileData.cFileName[0]!= _T('.'))
{
strDirTmp = strDir;
strDirTmp += "\\";
strDirTmp += FindFileData.cFileName;
OnTraverseFolder(strDirTmp,vecFile) ;
}
}
else
{
strDirTmp = strDir;
strDirTmp += "\\";
strDirTmp += FindFileData.cFileName;
vecFile.push_back(strDirTmp);
}
if(!FindNextFile(hFind,&FindFileData)) break;
}
FindClose(hFind);
}
}
我的目的是把整个文件夹内的图片都读取到vector中,以便后续处理图片啊