Tags:
delphi
Hej udviklere
Jeg sidder med et lille problem.
Hvordan kan jeg finde alle txt-filer i et dir, og lægge navnene på filerne ind i en listbox???
Med venlig hilsen
Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk
13 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
0
Nu fik jeg den til at genkende en af filerne, men den bliver med med at tilføje filens indhold til ValuenListEditoren, ligesom i en løkke, og den stopper aldrig. Her er min nuværende kode:
procedure TForm2.ResearchPath(Path: String; ValueListEditor : TValueListEditor);
var
SearchRec: TSearchRec;
begin
if FindFirst(Path + '*.nst', faAnyFile, SearchRec) = 0 then
begin
repeat
if SearchRec.Attr and faAnyFile <> 0 then
begin
if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
begin
if LowerCase(ExtractFileExt(SearchRec.Name)) = '.nst' then
memomidl.Lines.LoadFromFile(Path + SearchRec.Name);
ValueListEditor1.InsertRow(memomidl.Lines.Strings[0], memomidl.Lines.Strings[1], true);
ResearchPath(Path + '\\' + SearchRec.Name, ValueListEditor1)
end;
end
until FindNext(SearchRec) = 0;
FindClose(SearchRec);
end;
end;
Jeg har foretaget et par ændringer i koden, ellers finder den intet. Der ligger to filer i diret bluemoon.nst og redmoon.nst. Den finder kun den ene, og den stopper aldrig med at tilføje den til ValueListEditoren.
Med venlig hilsen
Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk
0
Der skal selvfølgelig være "større end mindre end" tegn de steder, hvor der bliver nævnt tidligere i indlægget.
Med venlig hilsen
Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk
0
<quote>Nu fik jeg den til at genkende en af filerne, men den bliver med med at tilføje filens indhold til ValuenListEditoren, ligesom i en løkke, og den stopper aldrig.</quote>
Grunden til den ikke stopper er sikkert fordi det er en rekursiv funktion, dvs. den kalder sig selv og så arbejder den på den samme fil igen og igen og igen og igen.....
<quote>
<pre>
procedure TForm2.ResearchPath(Path: String; ValueListEditor : TValueListEditor);
var
SearchRec: TSearchRec;
begin
if FindFirst(Path + '*.nst', faAnyFile, SearchRec) = 0 then
begin
repeat
if SearchRec.Attr and faAnyFile != 0 then //bruger lige '!=' som forskellig fra...husk at rette det :-)
begin
if (SearchRec.Name != '.') and (SearchRec.Name != '..') then
begin
if LowerCase(ExtractFileExt(SearchRec.Name)) = '.nst' then
begin //du mangler da vist også begin end her
memomidl.Lines.LoadFromFile(Path + SearchRec.Name);
ValueListEditor1.InsertRow(memomidl.Lines.Strings[0], memomidl.Lines.Strings[1], true);
end;
ResearchPath(Path + '\\' + SearchRec.Name, ValueListEditor1); //bemærk at proceduren kalder sig selv her...du kan fjerne det hvis den ikke skal kigge evt. underbiblioteker igennem
end;
end
until FindNext(SearchRec) != 0; //bemærk ændringen
FindClose(SearchRec);
end;
end;
</pre>
</quote>
FindNext returnerer 0 hvis den er succesfuld og derfor stoppede din efter den havde fundet den første fil. Hvis du vil bruge FindNext(SearchRec) = 0 skal du lave det om til en while løkke.