VS2010 C++/MFC 實作查找D盤下所有檔案名包含”123”的檔案
我百度了,都是遍歷查找一個目錄下的,我想實作整個D盤查找
有大佬嗎
uj5u.com熱心網友回復:
遞回呼叫 。參考
void find(LPCTSTR lpPath,vector<FileInfo>& FileList)
{
string szFind(lpPath);
WIN32_FIND_DATA FindFileData;
szFind+=_T("\\*.*");
HANDLE hFind=::FindFirstFile(szFind.c_str(),&FindFileData);
if(INVALID_HANDLE_VALUE=https://bbs.csdn.net/topics/=hFind) return;
//
do
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{// dir
if(FindFileData.cFileName[0] != '.')
{
string szPath(lpPath);
szPath+=_T("\\");
szPath+=FindFileData.cFileName;
//TRACE1("%s\n",szPath.c_str());
find(szPath.c_str(),FileList);
}
}
else
{// file
string strFileName=FindFileData.cFileName;//檔案名
//TRACE1("%s\n",strFileName.c_str());
int at = strFileName.find_last_of('.');
if(at<0) continue;// file without extention
string ext=strFileName.substr(at);
//TRACE1("%s\n",ext.c_str());
//
at=0;// reset
while(((int)at=suffixStr.find(ext,at))>=0)// find type
// if(stricmp(suffixStr.c_str(),_T(".txt"))==0)
{// not suffixStr.c_str()==_T(".txt") ; never == !
//afxDump << at << "\n";
at+=ext.size();// move to seperetor '.'
if(suffixStr[at] != '.') continue;// not wanted !
//
FILETIME ft=FindFileData.ftCreationTime;
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft);
FileTimeToSystemTime(&ft,&st);
sprintf(buf,_T("%4d年%02d月%02d日%02d:%02d:%02d"),
st.wYear,st.wMonth,st.wDay,st.wHour/*北京時間*/,st.wMinute,st.wSecond);
string strFilePath=lpPath;
FileInfo fi;
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
//TRACE1("%s\n",strFileName.c_str());
FileList.push_back(fi);
}
}
} while (::FindNextFile (hFind, &FindFileData));
}
uj5u.com熱心網友回復:
整個D盤也算是一個目錄
uj5u.com熱心網友回復:
D:\\ 就是有個目錄uj5u.com熱心網友回復:
D:\\ 就是一個目錄uj5u.com熱心網友回復:
遞回可以搞定這個問題uj5u.com熱心網友回復:
CFileFind::FindFile/FileNextFile();列舉檔案uj5u.com熱心網友回復:
查找檔案,如果是檔案夾則遞回查找。如果是檔案則判斷一下檔案名再進行操作
void ShowFile(CString str_Dir, HTREEITEM tree_Root)
{
CFileFind FileFind;
HTREEITEM tree_Temp;
if (str_Dir.Right(1) != "\\")
str_Dir += "\\";
str_Dir += "*.*";
BOOL res = FileFind.FindFile(str_Dir);
while (res)
{
tree_Temp = tree_Root;
res = FileFind.FindNextFileW();
if (FileFind.IsDirectory() && !FileFind.IsDots())
{
CString strPath = FileFind.GetFilePath();
CString strTitle = FileFind.GetFileName();
tree_Temp = m_tree_local.InsertItem(strTitle, 0, 0, tree_Root);//,TVI_LAST
ShowFile(strPath, tree_Temp);
}
else if (!FileFind.IsDirectory() && !FileFind.IsDots())
{
//CString strPath = FileFind.GetFilePath(); //得到路徑,做為遞回呼叫的開始
//CString strTitle = FileFind.GetFileName();//得到檔案名,做為樹控的結點
//m_tree_local.InsertItem(strTitle, 2, 2, tree_Temp);//m_tree_Project
}
}
FileFind.Close();
}
uj5u.com熱心網友回復:
D盤也是一個檔案夾。uj5u.com熱心網友回復:
使用 CFileFind物件,CFileFind finder;
BOOL bWorking = finder.FindFile("*123*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();
cout << (LPCTSTR) finder.GetFileName() << endl;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/37051.html
標籤:基礎類
