Форум: "Основная";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c