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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 15.11.2009, 23:32   #11
Mickset
Пользователь
 
Регистрация: 12.11.2009
Сообщений: 12
По умолчанию

не компилирует, ошибку выбивает.
Mickset вне форума
Старый 15.11.2009, 23:32   #12
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от DarkEvil Посмотреть сообщение
ScanDir(StartDir + SearchRec.Name + '',Mask.List);
точка а не запятая
Это на каком языке переменные разделяются не запятыми, а точками???
mihali4 вне форума
Старый 15.11.2009, 23:48   #13
Mickset
Пользователь
 
Регистрация: 12.11.2009
Сообщений: 12
По умолчанию

Может кто уже поможет Что бы не развивать флудо-топик?

Последний раз редактировалось mihali4; 16.11.2009 в 10:50.
Mickset вне форума
Старый 16.11.2009, 00:02   #14
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

и то верно...
Код:
//поиск вложений-
procedure recurs(_dir,mask: string;_dest: TStrings;_subDirs:boolean);
var _sr: TSearchRec;
    _l : longint;
    _i : integer;

function ExtMatch(_fileext, _exts: string; _delimiter: char): boolean;
var _pos : longint;
begin
  Result:= false;
  //Check strings
  if (length(_fileext) = 0) or (length(_exts) = 0) then exit;
  //Rewrite strings
  _fileext := _delimiter + UpperCase(_fileext) + _delimiter;
  _exts := _delimiter + UpperCase(_exts) + _delimiter;
  //Search
  _pos := Pos(_fileext, _exts);
  //Found
  Result := (_pos <> 0);
end;
begin
 application.ProcessMessages;
 //
 _l:= length(_dir);
 if (_l=0) then exit;
 //rewrite path
 if (_dir[_l]<>':')and(_dir[_l]<>'\') then _dir:=_dir+'\';
 //Add files.
 _i:=FindFirst(_dir+'*.*',$37,_sr);
 while (_i=0) do
  begin
   //it's a directory
   if (_sr.Attr and $10 = $10) and (_sr.name <> '.') and
      (_sr.name <> '..') and (_subdirs)
       then recurs(_dir + _sr.name,mask,_dest,_subdirs) else
        if ExtMatch(ExtractFileExt(_sr.name),mask, ';') then
         if _dest.IndexOf(_dir + _sr.name) = -1
          then _dest.Add(_dir + _sr.name);
     _i:= FindNext(_sr);
   end;
 FindClose(_sr);
end;
//---



procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 recurs('d:\фильмы','.avi;',listbox1.Items,true)
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума
Старый 16.11.2009, 00:37   #15
Mickset
Пользователь
 
Регистрация: 12.11.2009
Сообщений: 12
По умолчанию

Конечно Спасибо..
Ничего не подумайте, но я попросил подправить ту процедуру что была в первом посте..
Mickset вне форума
Старый 16.11.2009, 01:14   #16
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Это на каком языке переменные разделяются не запятыми, а точками???
Мдя, думал об одном писал об ином )))

Цитата:
Сообщение от Mickset
Конечно Спасибо..
Ничего не подумайте, но я попросил подправить ту процедуру что была в первом посте..
Вот исправленый код

Код:
procedure ScanDir(StartDir, Mask: String; List: TStrings);
var
SearchRec: TSearchRec;
begin
 if Mask = '' then Mask:= '*.*';
 if StartDir[Length(StartDir)] <> '\' then StartDir := StartDir + '\';
 if FindFirst(StartDir+Mask, faAnyFile, SearchRec) = 0 then
 begin
  repeat
   Application.ProcessMessages;
    if (SearchRec.Attr and faDirectory) <> faDirectory then
     List.Add(StartDir + SearchRec.Name)
    else
    if (SearchRec.Attr and faDirectory) <> 0 then
    begin
      if (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then
     ScanDir(StartDir + SearchRec.Name + '',Mask,List);
    end;
   until FindNext(SearchRec) <> 0;
   FindClose(SearchRec);
 end;
end;
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!

Последний раз редактировалось DarkEvil; 16.11.2009 в 01:16.
DarkEvil вне форума
Старый 16.11.2009, 06:31   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ничего так просто не получится!
Mickset, Ваш код и так ищет в подкаталогах.
НО!!
Ключевая проблема вот здесь:
Цитата:
Код:
if FindFirst(StartDir+Mask
Вход осуществляется в подкаталогах, которые имеют расширение, совпадающее с маской! Проверьте, ищите, например, по маске *.htm, тогда создайте подкаталоги TEST1.HTM KUKU_TEST2.HTM и проверьте...

исправить надо так - делать два цикла поиска в одной процедуре - первый, как у Вас, только НЕ ОБРАБАТЫВАТЬ ПОДКАТАЛОГИ. второй цикл - по маске *.* и исключительно обрабатывать только подкаталоги (с рекурсивным вызовом процедуры ScanDir)

p.s. 100% именно эта проблема (маска в поиске не давала искать по подкаталогам!) здесь на форуме уже решалась, можете порулить поиском!
Serge_Bliznykov вне форума
Старый 16.11.2009, 11:58   #18
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ничего так просто не получится!
Mickset, Ваш код и так ищет в подкаталогах.
НО!!
Ключевая проблема вот здесь:
Код:
if FindFirst(StartDir[COLOR="Red"+]Mask[/COLOR]
Вы не правы, оно все отлично ищет, только проблема в двух строках кода
1:
Не правильно
Код:
if StartDir[Length(StartDir)] <> '' then StartDir := StartDir + '';
Правильно
Код:
if StartDir[Length(StartDir)] <> '\' then StartDir := StartDir + '\';
Нет слешей
2:
Код:
if (SearchRec.Name <> '..') and (SearchRec.Name <> '.')
А здесь немного иная кострукция
Код:
 if (SearchRec.Attr and faDirectory) <> 0 then
    begin
      if (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then
     ScanDir(StartDir + SearchRec.Name + '',Mask,List);
    end;
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!
DarkEvil вне форума
Старый 16.11.2009, 13:49   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Вы не правы, оно все отлично ищет, только проблема в двух строках кода
Да что Вы мне рассказываете!?!?
что строка кода:
Цитата:
Код:
 if FindFirst(StartDir+Mask, faAnyFile, SearchRec) = 0 then
при Mask <> '*.*' найдёт все подкаталоги!?
Ну так сделайте тестовую программку и проверьте, если Вы сомневаетесь для чего нужна маска файла в процедуре findfirst!
Serge_Bliznykov вне форума
Старый 16.11.2009, 16:37   #20
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov
при Mask <> '*.*' найдёт все подкаталоги!?
Ну так сделайте тестовую программку и проверьте, если Вы сомневаетесь для чего нужна маска файла в процедуре findfirst!
Извиняюсь за невнимательность ...
Ночью был сонный и писал )))
В таком случае исправляю свой пример:

Код:
procedure ScanDir(StartDir, Mask: String; List: TStrings);
var
SearchRec: TSearchRec;
begin
 if StartDir[Length(StartDir)] <> '\' then StartDir := StartDir + '\';
 if FindFirst(StartDir + '*.*', faAnyFile, SearchRec) = 0 then
 begin
  repeat
   Application.ProcessMessages;
    if (SearchRec.Attr and faDirectory) <> faDirectory then
    begin
      if ExtractFileExt(SearchRec.Name) = Mask then
        List.Add(StartDir + SearchRec.Name)
    end
    else
    if (SearchRec.Attr and faDirectory) <> 0 then
    begin
      if (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then
        ScanDir(StartDir + SearchRec.Name + '',Mask,List);
    end;
   until FindNext(SearchRec) <> 0;
   FindClose(SearchRec);
 end;
end;
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ScanDir('C:\', '.txt', Memo1.Lines);
end;
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!

Последний раз редактировалось DarkEvil; 16.11.2009 в 17:12.
DarkEvil вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск spree Microsoft Office Excel 22 16.11.2009 15:08
Поиск-? Evgenii БД в Delphi 8 31.07.2009 16:27
поиск - ? Evgenii БД в Delphi 11 22.07.2009 19:41
поиск artemavd БД в Delphi 3 21.10.2008 17:39
Поиск Andr Microsoft Office Excel 2 18.07.2007 11:49