[Back to DIRS SWAG index] [Back to Main SWAG index] [Original]
{
PER-ERIC LARSSON
> I've seen some posts asking how to search through directories or how to
> find a File anywhere on the disk, so here's a little Procedure I wrote
> to do it... Give it a whirl and feel free to ask questions...
There is a built in trap in the method you describe. I've fallen into it many
times myself so here's a clue. The problem:
if Your Procedure (that is called once per File) does some processing of the
File you SHOULD first make a backup copy. personally I rename the original
File to .BAK and then take that File as input, writing to a new File With the
original name, perhaps deleting the .bak File if everything works out fine.
For most purposes this works fine. But if you do this using findnext to find
the next File to work With it will Repeat itself til the end of time or
diskspace.
Therefore i recommend :
First get all Filenames to work With,
Then start processing the Files.
}
Procedure runFile(ft : String);
begin
{ Process File here}
end;
Procedure RUNALLFileS(FT : String);
Type
plista = ^tlista;
tlista = Record
namn : String;
prev : plista;
end;
Var
S : SearchRec;
Dir : DirStr;
Name : NameStr;
Ext : ExtStr;
pp : plista;
Function insertbefore(before : plista) : plista;
Var
p : plista;
begin
getmem(p, sizeof(tlista));
p^.prev := before;
insertbefore := p;
end;
Function deleteafter(before : plista) : plista;
begin
deleteafter := before^.prev;
freemem(before, sizeof(tlista));
end;
begin
pp := nil;
FSplit(fT, Dir, Name, Ext);
FINDFIRST(ft, $3f, S);
While DosERROR = 0 DO
begin
if (S.ATTR and $18) = 0 then
begin
pp := insertbefore(pp);
pp^.namn := dir + s.name;
end;
FINDNEXT(S);
end;
if pp <> nil then
Repeat
runFile(pp^.namn);
pp := deleteafter(pp);
Until pp = nil;
end;
begin
if paramcount > 0 then
begin
For filaa := 1 to paramcount do
runALLFileS(paramstr(filaa));
end;
Writeln('Klar')
end.
{
This is a cutout example from a Program i wrote
It won't compile but it'll show a way to do it !
}
[Back to DIRS SWAG index] [Back to Main SWAG index] [Original]