Поиск файла определенного размера
|
Используешь обычный поиск файлов. используй функции 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 ; |