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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2010, 01:37   #1
Rifler
Пользователь
 
Регистрация: 15.12.2007
Сообщений: 44
По умолчанию Скан папки/диска

Добрый день.
Проблема такая - я указываю директорию и мне нужен список всех avi файлов в этой директории и ее поддиректориях.

Есть ли какие-то стандартные дельфийские решения? Если нет, то подтолкните в правильном направлении
Rifler вне форума Ответить с цитированием
Старый 05.05.2010, 02:11   #2
RAZOR3
Пользователь
 
Регистрация: 25.04.2010
Сообщений: 38
По умолчанию

Код:
procedure DirSearch(Dir: String; SL: TstringList);
Var
SearchRec:TSearchRec;
begin
if Dir<>'' then if Dir[length(Dir)]<>'\' then Dir:=Dir+'\';
if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
repeat
if (SearchRec.name='.') or (SearchRec.name='..') then continue;
if (SearchRec.Attr and faDirectory)<>0 then
ScanDirNew(Dir+SearchRec.name, sl)
else
if Copy(Dir+SearchRec.Name,pos('.avi',Dir+SearchRec.Name),4)='.avi' then begin
Sl.Add(Dir+SearchRec.Name);
Delete(SearchRec.Name,Length(searchRec.Name)-3,4);
end;
until
FindNext(SearchRec)<>0;
FindClose(SearchRec);
end;
использование - DirSearch('имя папки или диска', TStringList)

Последний раз редактировалось Stilet; 05.05.2010 в 08:50.
RAZOR3 вне форума Ответить с цитированием
Старый 05.05.2010, 06:40   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

RAZOR3
1) ну Вы же не новичок на форуме, используйте тег [СODE] для оформления кода!!
2) в коде ошибка - вместо ScanDirNew надо использовать DirSearch
3) ещё скрытая неточность, некоторые файлы не будут найдены - т.к. расширение у файла может иметь различный регистр...
4) для чего выполняется удаление расширения из имени? Это имя дальше никуда не идёт! остатки вашего старого кода?...

вот, например, нормальное решение задачи:
http://www.programmersforum.ru/showp...54&postcount=3

или можно вот так:
Код:
procedure DirSearch(Dir: string; Mask : string; SL: TStrings);
var
  SearchRec: TSearchRec;
begin
  Dir := IncludeTrailingBackslash(Dir);

  if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
    repeat
      Application.ProcessMessages;

      if (SearchRec.Attr and faDirectory) <> 0 then begin
        if (SearchRec.name <> '.') and (SearchRec.name <> '..') then
                DirSearch(Dir + SearchRec.name, Mask, sl)
      end
      else
        if MatchesMask(ExtractFileName(SearchRec.Name), Mask) then
          Sl.Add(Dir + SearchRec.Name);
    until FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
end;

...
// вызов, например, так:
  DirSearch('C:\TEMP', '*.AVI', Memo1.Lines);
p.s. чтобы работал if MatchesMask(... нужно в uses дописать Masks

p.p.s. вместо использования if MatchesMask(
можно так сравнивать совпадение имени шаблону:
Код:
if AnsiUpperCase(ExtractFileExt(SearchRec.Name))='.AVI' then ....

Последний раз редактировалось Serge_Bliznykov; 05.05.2010 в 06:47.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скан-код клавиши CraZZZy-GameRRR Общие вопросы Delphi 12 26.05.2010 13:44
скан по столбцам женя2010 Microsoft Office Excel 4 28.04.2010 18:02
Считывание скан кода IgorKr Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 25.02.2009 00:47
Скан диска ZYRGiX Win Api 7 30.12.2007 14:05