Recent

Author Topic: findallfiles hangs  (Read 3517 times)

hakelm

  • Full Member
  • ***
  • Posts: 153
findallfiles hangs
« on: October 22, 2017, 11:00:45 am »
I am trying to list my files on Ubuntu,  Lazarus 1.9 with
  files:=tstringlist.Create;
  findallfiles(files,'/');
but findallfiles never returns.
I suspect that findallfiles follows links and plays ping-pong with itself.
Is that so or is there any other reason?
How can I get findallfiles to work?
Thanks in advance for any tip.
H

Bart

  • Hero Member
  • *****
  • Posts: 5288
    • Bart en Mariska's Webstek
Re: findallfiles hangs
« Reply #1 on: October 22, 2017, 11:13:26 am »
You can try to set the propert FollowSymlinks to False?

Bart

hakelm

  • Full Member
  • ***
  • Posts: 153
Re: findallfiles hangs
« Reply #2 on: October 23, 2017, 01:15:19 pm »
Thanks,
but I can't see that

procedure FindAllFiles(AList: TStrings; const SearchPath: String;
  SearchMask: String = ''; SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory);
or
function FindAllFiles(const SearchPath: String; SearchMask: String = '';
  SearchSubDirs: Boolean = True): TStringList;

has any parameter FollowSymlinks.
The DirAttr are only faReadOnly, faHidden,faSysFile, faVolumeId,faDirectory,faArchive.
H

howardpc

  • Hero Member
  • *****
  • Posts: 4144
Re: findallfiles hangs
« Reply #3 on: October 23, 2017, 02:10:04 pm »
Yes, you need a slightly extended FindAllFiles routine, such as this

Code: Pascal  [Select][+][-]
  1. uses FileUtil;
  2.  
  3. procedure FindAllFiles(AList: TStrings; const SearchPath: String;
  4.   SearchMask: String; SearchSubDirs, FollowSymLinks: Boolean; DirAttr: Word); overload;
  5. var
  6.   Searcher: TListFileSearcher;
  7. begin
  8.   Searcher := TListFileSearcher.Create(AList);
  9.   Searcher.DirectoryAttribute := DirAttr;
  10.   Searcher.FollowSymLink := FollowSymLinks;
  11.   try
  12.     Searcher.Search(SearchPath, SearchMask, SearchSubDirs);
  13.   finally
  14.     Searcher.Free;
  15.   end;
  16. end;
« Last Edit: October 23, 2017, 03:27:29 pm by howardpc »

hakelm

  • Full Member
  • ***
  • Posts: 153
Re: findallfiles hangs
« Reply #4 on: October 23, 2017, 03:11:08 pm »
Thanks,
seems to do the trick.
H

Bart

  • Hero Member
  • *****
  • Posts: 5288
    • Bart en Mariska's Webstek
Re: findallfiles hangs
« Reply #5 on: October 23, 2017, 09:59:00 pm »
Can you file a feature request for that in the bugtracker?

Bart

hakelm

  • Full Member
  • ***
  • Posts: 153
Re: findallfiles hangs
« Reply #6 on: October 24, 2017, 11:04:34 am »
I verified the pingpong behaviour by doing

mkdir fs;cd fs;touch ff;ln -s ../fs fl

and then executing

FindAllFiles(li,'/root/fs','*',true,faanyfile);

FindAllFiles actually returns after a while but with the interesting output in li below.
The modification proposed by Bart prevents this behaviour but no links are listed.
It should also be noted that the OnFileFound event is not triggered by TListFileSearcher.DoFileFound.

/root/fs/ff
/root/fs/fl/ff
/root/fs/fl/fl/ff
/root/fs/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff
/root/fs/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/fl/ff

 

TinyPortal © 2005-2018