Используешь обычный поиск файлов.
используй функции
FindFirstFile
FindNextFile
FindClose
При нахождению файлов ( их можно искать по маске *.* ) функции
заполняют структуру
typedef struct _WIN32_FIND_DATA { // wfd
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName[ MAX_PATH ];
TCHAR cAlternateFileName[ 14 ];
} WIN32_FIND_DATA;
Откуда можно взять размер файла.
Или можно поступить таким образом:
bool ScanDrive(CString dir /*Например: Temp:\*.* */)
{
CFileFind hFile;
DWORD dwSize;
CFile m_sFile;
hFile.FindFile(dir,0); int ErCount=0;
hFile.FindNextFile();
do{
if(!hFile.IsDirectory())
dwSize=m_sFile.GetLength();/*Тут получаем размер файла. Если подходит, то можем уже куда либо занести его.*/
if((hFile.IsDirectory())&&(hFile.GetFileName()!=".")&&(hFile.GetFileName()!="..")){
if(!ScanDrive(hFile.GetFilePath()+"\\*.*"))
return false;
}
if(!hFile.FindNextFile())//
ErCount++;
}while(ErCount<2);
return true;
}
Приведённый ниже пример выводит имена каталогов и файлов ,
а как вывести имена подкаталогов?
WIN32_FIND_DATA Find;
HANDLE hFind;
hFind = FindFirstFile("d:\\*" , &Find);
if (hFind != INVALID_HANDLE_VALUE)
{ do
{
ListBox2-> Items ->Add(Find.cFileName);
}
while (FindNextFile(hFind,&Find));
FindClose(hFind);
CloseHandle(hFind);
}
return ;