![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FindFirst, FindNext, FindClose [D5, Win95/98, Win2k]
BJValentine © (2002-11-21 11:25:00)Ребята, кто на этом собаку съел. Юзаю, нифига не получается.
Пробую: FindFirst("c:\temp",faAnyFile,Attrs);
, а оно выдаёт Attrs.Name=temp, причём папка temp не пуста.
Dimka Maslov (2002-11-21 14:56:00) [1]http://delphibase.endimus.com/?action=viewfunc&topic=fileops&id=10046
Anatoly Podgoretsky (2002-11-21 13:19:00) [2]Да если надо твой код довести до кондиции, то не составит проблем, но думаю что BJValentine и так это сделать сам в состоянии
Anatoly Podgoretsky (2002-11-21 13:18:00) [3]Не надо для меня или для Song или для Игорь Шевченко - из трех проблем ты исправил только 1. и то оставил определение переменной.
по пункту 3. attr = 0 это довольно подлая и грубая ошибка.
Еще раз не надо приводить код для нас, замечания то сделано совсем с другой целью, только показать где у тебя ошибки и я думаю что BJValentine их просто учтет. А если нужен правильный код то в Чаво приведен отлаженный код, учитывающий и разные версии Дельфи (у тебя правда тоже учтено).
liho26 (2002-11-21 13:13:00) [4]Ладно, с Begin и end я погорячился....
Song (2002-11-21 13:07:00) [5]Тогда во-первых не откпомпилится, а во-вторых даже если откомпилится :-) FindClose() будет вызываться даже если файл(ы) такой(ие) не найден(ы).
Я бы сказал, надо переменной i вообще присвоить 0.
Так что liho26, давай ещё раз!? ;-)
liho26 (2002-11-21 13:02:00) [6]Ну, вы, блин, мужики даете! :)
Если честно, у меня все нормально работает. Впрочем, для самых настырных настоятельно рекомендую
1. убрать две строки после
if FindFirst(SearchString, 0, res)=0 then
Соответсвенно это
begin
data.Add(res.Name);
Убрать end;послеFindClose(res);
Или
2. ничего не трогать и только в цикле
For i:=1 to Data.Count-1 do
переменной i присвоить значение 2.
Все, с меня хватит! Я только дал подсказку и не слова не говорил о том, что это готвый вариант. Как и что подправить в коде, чтобы он работал в вашем конкретном случае корректно - думайте сами! )))
-------------------
С уважением...
Song (2002-11-21 12:51:00) [7]А теперь ещё раз для меня т.к. опять два раза добавляется :)
liho26 (2002-11-21 12:47:00) [8]Извиняюсь, ошибочка вышла. "Без ног" получилась она. Вот верный код
procedure TForm1.FindFile;
Var
res: TsearchRec;
i: Integer;
SearchString: String;
data: TstringList;
begin
Memo1.Clear;
SearchString:="C:\Temp\*.jpg";
Data:=TStringList.Create;
try
if FindFirst(SearchString, 0, res)=0 then
begin
data.Add(res.Name);
repeat
data.Add(res.Name);
until FindNext(res) <> 0;
FindClose(res);
end;
// Отдаем все в Memo
For i:=1 to Data.Count-1 do
Memo1.Lines.Add(Data.Strings[i]);
finally
Data.Free;
end;
end;
Игорь Шевченко (2002-11-21 12:46:00) [9]Блин, но все равно два раза первое имя добавляется :-)
Придется еще и для меня переписать :-)
liho26 (2002-11-21 12:45:00) [10]Анатолий, эта процедура переписана специально для Вас! ))
procedure TForm1.FindFile;
Var
res: TsearchRec;
i: Integer;
SearchString: String;
data: TstringList;
begin
Memo1.Clear;
SearchString:="C:\Temp\*.jpg";
Data:=TStringList.Create;
try
if FindFirst(SearchString, 0, res)=0 then
begin
data.Add(res.Name);
repeat
data.Add(res.Name);
until FindNext(res) <> 0;
FindClose(res);
end;
--------------------
С уважением....
Song (2002-11-21 12:42:00) [11]Народ, я ссылку дал, вам лень сходить?
Anatoly Podgoretsky (2002-11-21 12:26:00) [12]Только три ошибки
1. неопределен I, точнее данная переменная вообще не нужна, memo1.Lines.Add()
2. первое имя добавляется дважды
3. attr := faAnyFile; по вопросу все файлы, но может надо - faDirectory, а еще точнее данная переменная вообще не нужна, заменить константой.
Остальное нормально
liho26 (2002-11-21 12:14:00) [13]Ок. Вот работая версия программы: Полный вариант. Нужны Memo and SpeedButton. В каталоге С:\temp ищем все файлы с расширением jpg
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Memo1: TMemo;
SpeedButton1: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
private
procedure FindFile;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.FindFile;
Var
res: TsearchRec;
attr, i: Integer;
SearchString: String;
begin
attr:=0;
i:=0;
SearchString:="C:\Temp\*.jpg";
if FindFirst(SearchString, attr, res)=0 then
begin
memo1.Lines.Insert(0,res.Name);
repeat
memo1.Lines.Insert(i,res.Name);
i:=i+1;
until FindNext(res) <> 0;
FindClose(res);
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
FindFile;
end;
end.
Reindeer Moss Eater (2002-11-21 11:48:00) [14]Пробую: FindFirst("c:\temp",faAnyFile,Attrs);
Пробуй: FindFirst("c:\temp\*.*",faAnyFile,Attrs);
Anatoly Podgoretsky (2002-11-21 11:44:00) [15]Только не рабочая, но возможно потому что не все приведено и кроме того не соответствует ешл вопросу, attr не верный.
liho26 (2002-11-21 11:35:00) [16]Вот процедурка из моей программки. Может поможет?
Var
res: TsearchRec;
attr: Integer;
SearchString: String;
a: TstringList;
begin
attr:=0;
if FindFirst(SearchString, attr, res)=0 then
begin
a.Insert(0,res.Name);
repeat
a.Insert(i,res.Name);
i:=i+1;
until FindNext(res) <> 0;
FindClose(res);
end;
Вместо SearchStringпоставь свой путь к папочке
Song (2002-11-21 11:26:00) [17]http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=delphi;action=display;num=1037272197