#include
<
afxtempl.h
>
typedef CList < CString,CString &> StringList;
void GetAllFiles(CString path,StringList & filenamelist, POSITION headpos)
{
WIN32_FIND_DATA fdata = { 0 };
_chdir(path.GetBuffer( 0 ));
HANDLE hSearch = FindFirstFile(_T( " * " ), & fdata);
if (hSearch == INVALID_HANDLE_VALUE)
return ;
CString FileName;
if (fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
if (fdata.cFileName[ 0 ] != ' . ' )
{
CString childpath;
childpath.Format( " %s\\%s " ,path,fdata.cFileName);
SetCurrentDirectory(childpath.GetBuffer( 0 ));
GetAllFiles(childpath,filenamelist,headpos);
SetCurrentDirectory( " .. " );
}
}
else
{
FileName.Format( " %s\\%s " ,path,fdata.cFileName);
filenamelist.InsertAfter(headpos,FileName);
}
while (FindNextFile(hSearch, & fdata))
{
if (fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
if (fdata.cFileName[ 0 ] != ' . ' )
{
CString childpath;
childpath.Format( " %s\\%s " ,path,fdata.cFileName);
SetCurrentDirectory(childpath.GetBuffer( 0 ));
GetAllFiles(childpath,filenamelist,headpos);
SetCurrentDirectory( " .. " );
}
}
else
{
FileName.Format( " %s\\%s " ,path,fdata.cFileName);
filenamelist.InsertAfter(headpos,FileName);
}
}
FindClose(hSearch);
}
// 调用
StringList FileNameList;
CString Head = " . " ;
POSITION pos = FileNameList.AddHead(Head);
GetAllFiles(Path,FileNameList,pos);
int nCount = FileNameList.GetCount();
for ( int i = 1 ;i < nCount;i ++ )
{
POSITION pos = FileNameList.FindIndex(i);
CString FileName = FileNameList.GetAt(pos);
cout << FileName.GetBuffer( 0 ) << endl;
}
typedef CList < CString,CString &> StringList;
void GetAllFiles(CString path,StringList & filenamelist, POSITION headpos)
{
WIN32_FIND_DATA fdata = { 0 };
_chdir(path.GetBuffer( 0 ));
HANDLE hSearch = FindFirstFile(_T( " * " ), & fdata);
if (hSearch == INVALID_HANDLE_VALUE)
return ;
CString FileName;
if (fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
if (fdata.cFileName[ 0 ] != ' . ' )
{
CString childpath;
childpath.Format( " %s\\%s " ,path,fdata.cFileName);
SetCurrentDirectory(childpath.GetBuffer( 0 ));
GetAllFiles(childpath,filenamelist,headpos);
SetCurrentDirectory( " .. " );
}
}
else
{
FileName.Format( " %s\\%s " ,path,fdata.cFileName);
filenamelist.InsertAfter(headpos,FileName);
}
while (FindNextFile(hSearch, & fdata))
{
if (fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
if (fdata.cFileName[ 0 ] != ' . ' )
{
CString childpath;
childpath.Format( " %s\\%s " ,path,fdata.cFileName);
SetCurrentDirectory(childpath.GetBuffer( 0 ));
GetAllFiles(childpath,filenamelist,headpos);
SetCurrentDirectory( " .. " );
}
}
else
{
FileName.Format( " %s\\%s " ,path,fdata.cFileName);
filenamelist.InsertAfter(headpos,FileName);
}
}
FindClose(hSearch);
}
// 调用
StringList FileNameList;
CString Head = " . " ;
POSITION pos = FileNameList.AddHead(Head);
GetAllFiles(Path,FileNameList,pos);
int nCount = FileNameList.GetCount();
for ( int i = 1 ;i < nCount;i ++ )
{
POSITION pos = FileNameList.FindIndex(i);
CString FileName = FileNameList.GetAt(pos);
cout << FileName.GetBuffer( 0 ) << endl;
}