Кусок рабочего кода, лишнее поубирайте, смысл думаю, понятен
Код | //--------------------------------------------------------------------------- /* Создает список из элементов каталога в поле Root и маской *.* Для каждого каталога из списка вызывает аналогичную функцию pProcess - Объект индикатора процесса */ void TMAN_DirectoryItemList::Reload(TMAN_ProgressStatObject *pProcess) { TSearchRec sr; int iAttributes = 0; int Count; TMAN_DirectoryItem *NewItem;
iAttributes |= faReadOnly; iAttributes |= faHidden; iAttributes |= faSysFile; iAttributes |= faDirectory; iAttributes |= faArchive; iAttributes |= faAnyFile;
Clear(); Application->ProcessMessages(); Count = 0; if (FindFirst(Root+ "*.*", iAttributes, sr) == 0) { do { if (pProcess!= NULL) { if (pProcess->IsStop()) { Clear(); break; } } if (Count++ > 1000) { // Для исключения подвисания прогресса на больших списках файлов Application->ProcessMessages(); Count = 1000; } if (sr.Attr & faDirectory) { if ((sr.Name == ".")||(sr.Name == "..")) continue; // Добавляем каталог NewItem = new TMAN_DirectoryItem(this,Root); NewItem->Name = sr.Name; NewItem->Type = 10; NewItem->Reload(pProcess); ColvoFolders++; TotalColvoFolders++; TotalColvoFiles+=NewItem->ColvoFiles; TotalColvoFolders+=NewItem->ColvoFolders; TotalSize+=NewItem->Size; if (pProcess!= NULL) { pProcess->IncFolder(1); pProcess->IncFilesSize(sr.Size); } } else { // Добавляем файл NewItem = new TMAN_DirectoryItem(this,Root); NewItem->Name = sr.Name; NewItem->Type = 20; NewItem->Size = sr.Size; ColvoFiles++; TotalColvoFiles++; Size+=sr.Size; TotalSize+=sr.Size; if (pProcess!= NULL) { pProcess->IncFile(1); pProcess->IncFilesSize(sr.Size); } } pvItems->Add(NewItem); } while (FindNext(sr) == 0); FindClose(sr); } }
|
|