博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用FindFirstFile和FindNextFile对给定目录下所有文件进行广度优先遍历
阅读量:6614 次
发布时间:2019-06-24

本文共 1688 字,大约阅读时间需要 5 分钟。

 
bool FFBreadth(TCHAR *szPath)//输入只能以C:\xx或C:\xx\*为格式,不能以‘\’作为路径结尾。详见MSDN的FindFirstFile.
{
if(_taccess(szPath,0)==-1)
{
cout<<"路径不存在"<
return false;
}
 
wstring wsPath(szPath);
 
if(wsPath.back()!=_T('*'))
wsPath=wsPath+_T("\\*");
 
 
HANDLE hd=INVALID_HANDLE_VALUE;
WIN32_FIND_DATA fd;
::memset(&fd,0,sizeof(fd));
LARGE_INTEGER li;
queue
q;
 
wofstream wof(_T("f:\\tra-data2.txt"));
 
hd = FindFirstFile(wsPath.c_str(),&fd);
if(hd == INVALID_HANDLE_VALUE)
{
cout<<"INVALID_HANDLE_VALUE"<
wof.close();
return false;
}
wstring wstemp(szPath);
do
{
if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(fd.cFileName[0]!=_T('.'))
q.push(wstemp+_T("\\")+fd.cFileName+_T("\\*"));
}
else
{
li.HighPart = fd.nFileSizeHigh;
li.LowPart = fd.nFileSizeLow;
wcout<
<<_T(" ")<
<<_T("bytes")<
wof<
<<_T(" ")<
<<_T("bytes")<
}
 
}while(FindNextFile(hd,&fd));//FindNextFile正常终止时,用GetLastError可返回ERROR_NO_MORE_FILES
 
FindClose(hd);//不能用CloseHandle
 
while(!q.empty())
{
wstemp = q.front();
q.pop();
 
hd = FindFirstFile(wstemp.c_str(),&fd);
 
if(hd == INVALID_HANDLE_VALUE)
{
cout<<"返回无效句柄"<
wof.flush();
wof.close();
return false;
}
 
wstring wst(wstemp);
wst.pop_back();//去*
do
{
if(fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
if(fd.cFileName[0]!=_T('.'))
q.push(wst+fd.cFileName+_T("\\*"));
}
else
{
li.HighPart = fd.nFileSizeHigh;
li.LowPart = fd.nFileSizeLow;
wcout<
<<_T(" ")<
<<_T("bytes")<
wof<
<<_T(" ")<
<<_T("bytes")<
}
 
}while(FindNextFile(hd,&fd));
}
 
FindClose(hd);
wof.flush();
wof.close();
 
return true;
 
}

转载于:https://www.cnblogs.com/qinfengxiaoyue/archive/2013/05/17/3082988.html

你可能感兴趣的文章