Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.02;
Скачать: CL | DM;

Вниз

FindFirst, FindNext, FindClose   Найти похожие ветки 

 
BJValentine ©   (2002-11-21 11:25) [0]

Ребята, кто на этом собаку съел. Юзаю, нифига не получается.
Пробую: FindFirst("c:\temp",faAnyFile,Attrs);
, а оно выдаёт Attrs.Name=temp, причём папка temp не пуста.


 
Song ©   (2002-11-21 11:26) [1]

http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=delphi;action=display;num=1037272197


 
liho26 ©   (2002-11-21 11:35) [2]

Вот процедурка из моей программки. Может поможет?


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 поставь свой путь к папочке


 
Anatoly Podgoretsky ©   (2002-11-21 11:44) [3]

Только не рабочая, но возможно потому что не все приведено и кроме того не соответствует ешл вопросу, attr не верный.


 
Reindeer Moss Eater   (2002-11-21 11:48) [4]

Пробую: FindFirst("c:\temp",faAnyFile,Attrs);
Пробуй: FindFirst("c:\temp\*.*",faAnyFile,Attrs);


 
liho26 ©   (2002-11-21 12:14) [5]

Ок. Вот работая версия программы: Полный вариант. Нужны 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.


 
Anatoly Podgoretsky ©   (2002-11-21 12:26) [6]

Только три ошибки

1. неопределен I, точнее данная переменная вообще не нужна, memo1.Lines.Add()
2. первое имя добавляется дважды
3. attr := faAnyFile; по вопросу все файлы, но может надо - faDirectory, а еще точнее данная переменная вообще не нужна, заменить константой.

Остальное нормально


 
Song ©   (2002-11-21 12:42) [7]

Народ, я ссылку дал, вам лень сходить?


 
liho26 ©   (2002-11-21 12:45) [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;

--------------------
С уважением....


 
Игорь Шевченко ©   (2002-11-21 12:46) [9]

Блин, но все равно два раза первое имя добавляется :-)
Придется еще и для меня переписать :-)


 
liho26 ©   (2002-11-21 12:47) [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;

// Отдаем все в Memo
For i:=1 to Data.Count-1 do
Memo1.Lines.Add(Data.Strings[i]);
finally
Data.Free;
end;
end;


 
Song ©   (2002-11-21 12:51) [11]

А теперь ещё раз для меня т.к. опять два раза добавляется :)


 
liho26 ©   (2002-11-21 13:02) [12]

Ну, вы, блин, мужики даете! :)
Если честно, у меня все нормально работает. Впрочем, для самых настырных настоятельно рекомендую
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 13:07) [13]

Тогда во-первых не откпомпилится, а во-вторых даже если откомпилится :-) FindClose() будет вызываться даже если файл(ы) такой(ие) не найден(ы).
Я бы сказал, надо переменной i вообще присвоить 0.
Так что liho26, давай ещё раз!? ;-)


 
liho26 ©   (2002-11-21 13:13) [14]

Ладно, с Begin и end я погорячился....


 
Anatoly Podgoretsky ©   (2002-11-21 13:18) [15]

Не надо для меня или для Song или для Игорь Шевченко - из трех проблем ты исправил только 1. и то оставил определение переменной.

по пункту 3. attr = 0 это довольно подлая и грубая ошибка.

Еще раз не надо приводить код для нас, замечания то сделано совсем с другой целью, только показать где у тебя ошибки и я думаю что BJValentine их просто учтет. А если нужен правильный код то в Чаво приведен отлаженный код, учитывающий и разные версии Дельфи (у тебя правда тоже учтено).


 
Anatoly Podgoretsky ©   (2002-11-21 13:19) [16]

Да если надо твой код довести до кондиции, то не составит проблем, но думаю что BJValentine и так это сделать сам в состоянии


 
Dimka Maslov ©   (2002-11-21 14:56) [17]

http://delphibase.endimus.com/?action=viewfunc&topic=fileops&id=10046



Страницы: 1 вся ветка

Текущий архив: 2002.12.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
1-4464
SSA
2002-11-20 13:03
2002.12.02
строки


8-4519
Карлсон
2002-08-10 01:45
2002.12.02
AVI и кодеки.


4-4669
Alex
2002-10-21 02:27
2002.12.02
Обновление окна


1-4363
Борис
2002-11-21 16:52
2002.12.02
ShellExecute Как заставить IE зарузить новую страницу


1-4274
сергеич
2002-11-21 10:04
2002.12.02
Компоненты