From 34803af73497010a27d6ab7ce0c5c9e401f33ff8 Mon Sep 17 00:00:00 2001 From: bart <9132501-flyingsheep@users.noreply.gitlab.com> Date: Wed, 28 Nov 2018 17:23:33 +0000 Subject: [PATCH] - TFileSearcher: implement property PathSeparator. - and expose both MaskSeparator and PathSeparator in FindAllFiles() - expose PathSeparator in FindAllDirectories. Issue #0034607. git-svn-id: trunk@59687 - --- components/lazutils/fileutil.inc | 19 ++++++++++++------- components/lazutils/fileutil.pas | 12 ++++++++---- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/components/lazutils/fileutil.inc b/components/lazutils/fileutil.inc index 0bdbecbb46..37b1272858 100644 --- a/components/lazutils/fileutil.inc +++ b/components/lazutils/fileutil.inc @@ -626,12 +626,15 @@ begin end; procedure FindAllFiles(AList: TStrings; const SearchPath: String; - SearchMask: String; SearchSubDirs: Boolean; DirAttr: Word); + SearchMask: String; SearchSubDirs: Boolean; DirAttr: Word; + MaskSeparator: char; PathSeparator: char); var Searcher: TListFileSearcher; begin Searcher := TListFileSearcher.Create(AList); Searcher.DirectoryAttribute := DirAttr; + Searcher.MaskSeparator := MaskSeparator; + Searcher.PathSeparator := PathSeparator; try Searcher.Search(SearchPath, SearchMask, SearchSubDirs); finally @@ -640,10 +643,11 @@ begin end; function FindAllFiles(const SearchPath: String; SearchMask: String; - SearchSubDirs: Boolean; DirAttr: Word): TStringList; + SearchSubDirs: Boolean; DirAttr: Word; + MaskSeparator: char; PathSeparator: char): TStringList; begin Result := TStringList.Create; - FindAllFiles(Result, SearchPath, SearchMask, SearchSubDirs, DirAttr); + FindAllFiles(Result, SearchPath, SearchMask, SearchSubDirs, DirAttr, MaskSeparator, PathSeparator); end; { TListDirectoriesSearcher } @@ -660,19 +664,20 @@ begin end; function FindAllDirectories(const SearchPath : string; - SearchSubDirs: Boolean = True): TStringList; + SearchSubDirs: Boolean; PathSeparator: char): TStringList; begin Result := TStringList.Create; - FindAllDirectories(Result, SearchPath, SearchSubDirs); + FindAllDirectories(Result, SearchPath, SearchSubDirs, PathSeparator); end; procedure FindAllDirectories(AList: TStrings; const SearchPath: String; - SearchSubDirs: Boolean = true); + SearchSubDirs: Boolean; PathSeparator: char); var Searcher :TFileSearcher; begin Assert(AList <> nil); Searcher := TListDirectoriesSearcher.Create(AList); + Searcher.PathSeparator := PathSeparator; try Searcher.Search(SearchPath, AllFilesMask, SearchSubDirs); finally @@ -816,7 +821,7 @@ begin SearchDirectories:=TStringList.Create; try while ASearchPath<>'' do begin - p:=Pos(';',ASearchPath); + p:=Pos(FPathSeparator,ASearchPath); if p<1 then p:=length(ASearchPath)+1; Dir:=TrimFilename(LeftStr(ASearchPath,p-1)); diff --git a/components/lazutils/fileutil.pas b/components/lazutils/fileutil.pas index b80db5ab65..92d23cb1d1 100644 --- a/components/lazutils/fileutil.pas +++ b/components/lazutils/fileutil.pas @@ -120,6 +120,7 @@ type TFileSearcher = class(TFileIterator) private FMaskSeparator: char; + FPathSeparator: char; FFollowSymLink: Boolean; FOnFileFound: TFileFoundEvent; FOnDirectoryFound: TDirectoryFoundEvent; @@ -137,6 +138,7 @@ type ASearchSubDirs: Boolean = True; CaseSensitive: Boolean = False); public property MaskSeparator: char read FMaskSeparator write FMaskSeparator; + property PathSeparator: char read FPathSeparator write FPathSeparator; property FollowSymLink: Boolean read FFollowSymLink write FFollowSymLink; property FileAttribute: Word read FFileAttribute write FFileAttribute default faAnyfile; property DirectoryAttribute: Word read FDirectoryAttribute write FDirectoryAttribute default faDirectory; @@ -168,14 +170,16 @@ type end; function FindAllFiles(const SearchPath: String; SearchMask: String = ''; - SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory): TStringList; overload; + SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory; + MaskSeparator: char = ';'; PathSeparator: char = ';'): TStringList; overload; procedure FindAllFiles(AList: TStrings; const SearchPath: String; - SearchMask: String = ''; SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory); overload; + SearchMask: String = ''; SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory; + MaskSeparator: char = ';'; PathSeparator: char = ';'); overload; function FindAllDirectories(const SearchPath: string; - SearchSubDirs: Boolean = True): TStringList; overload; + SearchSubDirs: Boolean = True; PathSeparator: char = ';'): TStringList; overload; procedure FindAllDirectories(AList: TStrings; const SearchPath: String; - SearchSubDirs: Boolean = true); overload; + SearchSubDirs: Boolean = true; PathSeparator: char = ';'); overload; // flags for copy type