Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2011, 01:27   #1
pupilMartyr
Пользователь
 
Аватар для pupilMartyr
 
Регистрация: 02.05.2011
Сообщений: 45
Вопрос Поиск файлов в каталоге. WinApi.

Здравствуйте. Задача такая. В выбранном каталоге программа производит поиск исполняемых файлов формата Win32PE (*.exe) и динамических библиотек (*.dll), с учетом подкаталогов.
Вот код:
Код:
procedure TForm1.FindFiles(dir: string);
  var SRexe, SRdll: TSearchRec;
      findResExe, findResDll:Integer;
      dir_copy: string;
begin
    dir_copy:= dir;

    findResExe:= FindFirst(dir + '*.exe', faAnyFile, SRexe);
    findResDll:= FindFirst(dir + '*.dll', faAnyFile, SRdll);

    while (findResExe = 0) do
    begin
        if ((SRexe.Attr and faDirectory) = faDirectory) then
        begin
            if not((SRexe.Name = '.') or (SRexe.Name = '..')) then
                FindFiles(dir + SRexe.Name + '\');
            findResExe:= FindNext(SRexe);
            Continue;
        end
        else begin
            sgFiles.RowCount:= sgFiles.RowCount + 1;
            sgFiles.Cells[0,sgFiles.RowCount - 1]:= SRexe.Name;
            sgFiles.Cells[1,sgFiles.RowCount - 1]:= IntToStr(SRexe.Size);

            findResExe:= FindNext(SRexe);
        end;
    end;

    while (findResDll = 0) do
    begin
        if ((SRdll.Attr and faDirectory) = faDirectory) then
        begin
            if not((SRdll.Name = '.') or (SRdll.Name = '..')) then
                FindFiles(dir_copy + SRdll.Name + '\');
            findResDll:= FindNext(SRdll);
        end
        else begin
            sgFiles.RowCount:= sgFiles.RowCount + 1;
            sgFiles.Cells[0,sgFiles.RowCount - 1]:= SRdll.Name;
            sgFiles.Cells[1,sgFiles.RowCount - 1]:= IntToStr(SRdll.Size);

            findResDll:= FindNext(SRdll);
        end;
    end;
    FindClose(SRexe);
    FindClose(SRdll);
end;
Конечно, повторение кода для dll, но это сейчас не так важно. Загвоздка в том, что файлы нужно находить и в подкаталогах, чего программа не делает. Хотя должна, т.к. я поверяю
Код:
  if ((SRexe.Attr and faDirectory) = faDirectory) then
Подскажите, пожалуйста, как решить эту проблему.
P.S. И заодно, может, проблему с повторением кода.

Последний раз редактировалось pupilMartyr; 04.12.2011 в 01:31.
pupilMartyr вне форума Ответить с цитированием
Старый 04.12.2011, 02:10   #2
pupilMartyr
Пользователь
 
Аватар для pupilMartyr
 
Регистрация: 02.05.2011
Сообщений: 45
По умолчанию

что никто не поможет?
Беда, беда (
pupilMartyr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск файлов в каталоге pupilMartyr Win Api 12 06.12.2011 00:16
Java чтение списка файлов в каталоге Lucky777 Помощь студентам 1 20.10.2011 21:00
Delphi. Выполнить поиск файлов в заданной пользователем каталоге Татьянушка Помощь студентам 0 23.05.2011 03:14
Переименование всех файлов в каталоге calugin PHP 3 14.05.2011 12:05
поиск в каталоге (assembler) YaraF Помощь студентам 0 28.02.2011 17:15