C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
каким образом можно посчитать кол-во файлов, используя FindFirst
enton
Отправлено: 16.02.2007, 14:11


Дежурный стрелочник

Группа: Участник
Сообщений: 44



так же нужно записать в переменную кол-во файлов в этой папке. как?
Tantos
Отправлено: 16.02.2007, 14:36


Станционный диспетчер

Группа: Участник
Сообщений: 108



Инкрементировать счетчик при поиске файлов или заносить в список/структуру/etc и потом смотреть кол-во элементов в них.
Termi_uc
Отправлено: 16.02.2007, 18:29


Дежурный стрелочник

Группа: Участник
Сообщений: 61



Примерно так:
CODE

bool MatchAttrs(DWORD flags, DWORD attrs)
{
return (flags & attrs) == flags;
}
//---------------------------------------------------------------------------

bool SearchInFolder(AnsiString folder, AnsiString mask, DWORD flags,
TStrings * names, bool addpath = false)
{
void * hSearch;
WIN32_FIND_DATA * FindData = new WIN32_FIND_DATA();
AnsiString strSearchPath;
bool bRes;

strSearchPath = folder + '\\' + mask;
bRes = false;

hSearch = FindFirstFile(strSearchPath.c_str(), FindData);
if (hSearch != INVALID_HANDLE_VALUE)
{
while(FindNextFile(hSearch, FindData) == true)
if ((AnsiString(FindData->cFileName) != "..") &&
(AnsiString(FindData->cFileName) != "."))
{
if (MatchAttrs(flags, FindData->dwFileAttributes))
{
if (addpath)
names->Add(folder + '\\' + FindData->cFileName);
else
names->Add(FindData->cFileName);
bRes = true;
}
}

FindClose(hSearch);
}
return bRes;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD flags = 0;
if (chkDirs->Checked) flags = flags | FILE_ATTRIBUTE_DIRECTORY;
if (chkHidden->Checked) flags = flags | FILE_ATTRIBUTE_HIDDEN;
if (chkSystem->Checked) flags = flags | FILE_ATTRIBUTE_SYSTEM;
if (chkReadOnly->Checked) flags = flags | FILE_ATTRIBUTE_READONLY;
if (chkArchive->Checked) flags = flags | FILE_ATTRIBUTE_ARCHIVE;

lblFound->Caption = "Поиск...";
lstFiles->Clear();
Refresh();

if (!SearchInFolder(txtFolder->Text, txtMask->Text, flags,
lstFiles->Items))
lblFound->Caption = "Поиск не дал результатов";
else
lblFound->Caption = "Найдено объектов: " + IntToStr(lstFiles->Count);
}

Пример из книги "Delphi. Трюки и эффекты".

Прикрепляю ещё проект на Builder'е — может пригодится кому.

Отредактировано Termi_uc — 16.02.2007, 19:51

User Attached Image Скачать файл
Поиск_файлов_test.zip


Termi_uc
Отправлено: 16.02.2007, 18:31


Дежурный стрелочник

Группа: Участник
Сообщений: 61



Там проблемы будут с русским названием файла, так что вот

User Attached Image Скачать файл
Found_files_testt.zip


enton
Отправлено: 17.02.2007, 17:31


Дежурный стрелочник

Группа: Участник
Сообщений: 44



пример самый что ненаесть наглядный, думаю на его основе все и навояю. хорошо что он с комментами)

Вернуться в Вопросы программирования в C++Builder