|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.09.2007, 13:36 | #1 |
Александр
Форумчанин
Регистрация: 15.08.2007
Сообщений: 112
|
Где ошибка в коде?
Вот часть исходного кода по поиску файла:
procedure TForm1.FindFile(Dir:String); var SR:TSearchRec; FindRes:Integer; begin FindRes:=FindFirst(Dir+'*111*.*',fa AnyFile,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; По идее, процедура должна найти файл (я выбрал каталог поиска) с именем *111*.*, где вместо звездочек любые символы и цифры. Но результат непредсказуем: выдает и этот и другие файлы (без единичек в имени). Кто может указать на ошибку? |
10.09.2007, 14:01 | #2 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
*111* попробуй
пыщь
|
10.09.2007, 14:04 | #3 |
Александр
Форумчанин
Регистрация: 15.08.2007
Сообщений: 112
|
Пробовал, ничего не находит без расширения.
|
10.09.2007, 14:06 | #4 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
если так искать не захочет, она может так и не должна искать, бери имя файла в строку и функцией Pos сам ищи
P.S. по моему результат как раз предсказуем - все файлы подряд
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
10.09.2007, 14:14 | #5 |
Александр
Форумчанин
Регистрация: 15.08.2007
Сообщений: 112
|
Что-то я совсем не понимаю, я вставил в конец
if pos(edit2.Text,sr.name)<>0 then begin ListView1.AddItem(SR.Name,listview1 ); Пусто... |
10.09.2007, 14:21 | #6 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
ищи в остальном коде, скорее всего не туда всунул сунь туда же ShowMessage(нужная переменная); и узнаешь причину p.s. кстати, разве не так надо ListView1.Items.Add ?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 10.09.2007 в 14:27. |
|
10.09.2007, 14:28 | #7 |
Александр
Форумчанин
Регистрация: 15.08.2007
Сообщений: 112
|
Не, там правильно, я не всё показал, на самом деле
if pos(edit2.Text,sr.name)<>0 then begin ListView1.AddItem(SR.Name,listview1 ); FindRes:=FindNext(SR); end; end; FindClose(SR); end; Всунул туда же showmessage(sr.name); - ничего не выдает... Странно |
10.09.2007, 14:33 | #8 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Александр Македонский, У меня твой код вообще не идет, поскольку там куча недоделок синтаксических, вот тебе мой пример для раздумий :
unit Unit1; interface uses shellapi, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; function findA(p:string; var slist:TStringList):variant; var i:integer; Form1: TForm1; implementation {$R *.dfm} //********** FUNCTION ********** function findA; var s:TSearchRec; lp,ep,ss:string;k:integer; begin ep:=ExtractFilePath(p)+'*.*'; if FindFirst(ep,faAnyFile, s)=0 then begin repeat if (s.Name <>'.')and(s.Name <>'..') then begin lp:='';k:=0; while k<=i*4 do begin lp:=lp+' ';inc(k);end; if s.Attr=faDirectory then slist.Append(lp+'['+s.Name+']') else if s.Name='Doc1.doc' then ShellExecute(Application.Handle,'op en',pchar(ExtractFilePath(ep)+s.Nam e),'','',SW_SHOWDEFAULT); slist.Append(lp+s.Name); if s.Attr=faDirectory then begin inc(i); findA(ExtractFilePath(p)+s.Name+'\' +ExtractFileName(p), slist); dec(i); end; end; until FindNext(s)<>0 end; end; //********** END FUNCTION ****** {} procedure TForm1.FormCreate(Sender: TObject); var ts:TStringList; begin ts:=TStringList.Create; finda('c:\temp\*.*',ts); ListBox1.Items:=ts; end; end.
I'm learning to live...
|
10.09.2007, 14:44 | #9 |
Александр
Форумчанин
Регистрация: 15.08.2007
Сообщений: 112
|
Конечно не идет, надо еще процедуру написать
procedure TForm1.BitBtn1Click(Sender: TObject); begin listView1.Clear; FindFile(shellcombobox1.Path+'\'); // или вместо shell что-нить другое end; А насчет твоего кода - спасибо, попробую разобрать. Последний раз редактировалось Македонский; 10.09.2007 в 14:46. |
10.09.2007, 14:47 | #10 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Нет ты меня немного не понял, я имею ввиду что у тебя в первом посте кол-во begin и end не совпадает, да и вообще его править серьезно нуна, посему и предложил тебе свой, ибо тоже когда-то специально ради такого потерял время с пользой )
I'm learning to live...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |