Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-4181
bigbill
2002-11-13 04:41
2002.12.02
номер записи ПОСЛЕ фильтрации


1-4315
esa
2002-11-21 14:21
2002.12.02
Службы в Win2k


3-4174
Тундра
2002-11-12 12:09
2002.12.02
Упаковка таблицы FoxPro


3-4198
Yazilimci
2002-11-13 15:22
2002.12.02
Vopros dlya ADO.


1-4436
Tano
2002-11-18 02:20
2002.12.02
Что такое Самоадресуемая запись?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский