本文转载自:http://www.cnblogs.com/smartstone/archive/2008/09/17/1292259.html
经验证可行。
#include <afxtempl.h>
#include <direct.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;
}
#include <direct.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;
}