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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2007, 14:51   #11
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

А у меня пашет, и если вместо FindFirst(Dir+'*111*.*',faAnyFile,S R); написать FindFirst(Dir+'*.*',faAnyFile,SR); - все просто в шоколаде!
Македонский вне форума Ответить с цитированием
Старый 10.09.2007, 14:54   #12
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Вот еще вариант:
Uses masks
Код:
 
procedure SearchinDir (Mask, Dir : string; var List :
TListBox);
var
  r: integer;
  f: TSearchRec;
begin
  ChDir (Dir); { Перейти в каталог, в котором идёт поиск }
  r := FindFirst ('*.*', faAnyFile, f); { Найти все файлы }
  while r = 0 do
  begin
    if MatchesMask (f.Name, Mask) then { Маска совпала }
      Form1.ListBox1.Items.add (ExpandFileName (f.Name));
    if (f.Attr and faDirectory) = faDirectory then
      if (f.Name <> '.') and (f.Name <> '..') then
      begin
        SearchInDir (Mask, ExpandFileName (f.Name), List);
      end;
    r := FindNext (f);
  end;
  FindClose (f);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text:='*8*.*'; {маска - любые файлы с "8" }
Edit2.Text:='d:\1\'; {путь}
SearchinDir(edit1.Text,Edit2.Text,ListBox1);
end;

Последний раз редактировалось Alex21; 10.09.2007 в 15:21.
Alex21 вне форума Ответить с цитированием
Старый 10.09.2007, 14:59   #13
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Alex21, Все правильно, у меня такой же код (я имею в виду по смыслу), к тому же твой код у меня дает такие же результаты.
Все понятно, ошибка не в самой процедуре, а возможно в отображении результата. Спасибо за помощь!
Македонский вне форума Ответить с цитированием
Старый 10.09.2007, 15:09   #14
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от Македонский Посмотреть сообщение
к тому же твой код у меня дает такие же результаты.
Странно, в моем коде вывод идет в листБокс строго по маске (у меня):
Код:
  Form1.ListBox1.Items.add ({ExpandFileName} (f.Name));
Присмотрись к функции MatchesMask - создание маски (*?)
Alex21 вне форума Ответить с цитированием
Старый 10.09.2007, 15:16   #15
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Раньше я не встречался с этой функцией, в хэлпе дельфийском как кот наплакал, не мог бы ты привести пример задания маски, какое значение имеет mask в твоем коде?
Македонский вне форума Ответить с цитированием
Старый 10.09.2007, 15:19   #16
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

См код. На созании формы в первом Edite - маска, во втором - путь.
Пример: ?e*.*

Первая буква неизвестна (?)
Вторая буква - е
Кол-во букв в имени - неизвестно - *
тип файла неизвестен - *

Последний раз редактировалось Alex21; 10.09.2007 в 15:25.
Alex21 вне форума Ответить с цитированием
Старый 10.09.2007, 15:45   #17
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Я использовал маску таким образом: FindFirst(Dir+'*'+edit2.text+'*.*', faAnyFile,SR);


А вот весь мой исходник:

procedure TForm1.FindFile(Dir:String);
var SR:TSearchRec;
FindRes:Integer;
begin
FindRes:=FindFirst(Dir+'*'+edit2.te xt+'*.*',faAnyFile,SR);
While FindRes=0 do
begin
if ((SR.Attr and faDirectory)=faDirectory) and
((SR.Name='.')or(SR.Name='..')) then
begin
FindRes:=FindNext(SR);
Continue;
end;
if ((SR.Attr and faDirectory)=faDirectory) then
begin
FindFile(Dir+SR.Name+'\');
FindRes:=FindNext(SR);
Continue;
end;
//----- следующий блок не обязателен
if checkbox3.Checked then begin
if ComboBox1.ItemIndex=0 then
if sr.Size<strtoint(edit1.Text)*1000 then begin
FindRes:=FindNext(SR);
Continue;
end;
if ComboBox1.ItemIndex=1 then
if sr.Size>strtoint(edit1.Text)*1000 then begin
FindRes:=FindNext(SR);
Continue;
end;
end;

if Checkbox2.Checked then begin
case ComboBox1.ItemIndex of 0:
if FileDateToDateTime(SR.Time)<DateTim ePicker1.Date
then begin
FindRes:=FindNext(SR);
Continue;
end; end;
case ComboBox1.ItemIndex of 1:
if FileDateToDateTime(SR.Time)>DateTim ePicker2.Date
then begin
FindRes:=FindNext(SR);
Continue;
end; end;
end;
//----------------------
begin
ListView1.AddItem(SR.Name,listview1 );
FindRes:=FindNext(SR);
end; end;
FindClose(SR);
end;


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
listView1.Clear;
FindFile(shellcombobox1.Path+'\');
end;

Не выходит...

Последний раз редактировалось Македонский; 10.09.2007 в 15:48.
Македонский вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ ошибка в коде. Непонимаю что не так POPOV Помощь студентам 2 04.09.2008 18:04
AD (LDAP) - ошибка в коде, на рассмотрение Mouse123 Общие вопросы Delphi 3 30.06.2008 14:10
Ошибка в коде (BorderStyle) Airou Общие вопросы Delphi 10 24.05.2008 19:50
Ошибка в коде nikleb Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 10.03.2008 22:48
Что в коде не так? Simply-Art Общие вопросы Delphi 3 08.07.2007 19:32