Also ich bin gerade dabei ein Programm zu schreiben, was einen Ordner oder mehrere überwachen soll.
Überwachen in dem Sinne, ob Dateien hinkommen, etc.
Leider hab ich jetzt das Problem, dass ich dazu zwar schon eine Möglichkeit gefunden habe, leider das Ganze aber nicht wirklich verstehe und deshalb würde ich jemanden hier bitten mir es zu erklären oder eine alternative (einfachere) Lösung anzubieten...
Ich bin dankbar für jeden Hilfe
Code:
function Like(const AString, APattern: String): Boolean;
var
StringPtr, PatternPtr: PChar;
StringRes, PatternRes: PChar;
begin
Result:=false;
StringPtr:=PChar(AString);
PatternPtr:=PChar(APattern);
StringRes:=nil;
PatternRes:=nil;
repeat
repeat // ohne vorangegangenes "*"
case PatternPtr^ of
#0: begin
Result:=StringPtr^=#0;
if Result or (StringRes=nil) or (PatternRes=nil) then
Exit;
StringPtr:=StringRes;
PatternPtr:=PatternRes;
Break;
end;
'*': begin
inc(PatternPtr);
PatternRes:=PatternPtr;
Break;
end;
'?': begin
if StringPtr^=#0 then
Exit;
inc(StringPtr);
inc(PatternPtr);
end;
else begin
if StringPtr^=#0 then
Exit;
if StringPtr^<>PatternPtr^ then begin
if (StringRes=nil) or (PatternRes=nil) then
Exit;
StringPtr:=StringRes;
PatternPtr:=PatternRes;
Break;
end
else begin
inc(StringPtr);
inc(PatternPtr);
end;
end;
end;
until false;
repeat // mit vorangegangenem "*"
case PatternPtr^ of
#0: begin
Result:=true;
Exit;
end;
'*': begin
inc(PatternPtr);
PatternRes:=PatternPtr;
end;
'?': begin
if StringPtr^=#0 then
Exit;
inc(StringPtr);
inc(PatternPtr);
end;
else begin
repeat
if StringPtr^=#0 then
Exit;
if StringPtr^=PatternPtr^ then
Break;
inc(StringPtr);
until false;
inc(StringPtr);
StringRes:=StringPtr;
inc(PatternPtr);
Break;
end;
end;
until false;
until false;
end;
procedure FindAllFiles(FileList: TStrings; RootFolder: string; Mask: string ='*'; Recurse: Boolean = True; AddFolderNames: Boolean = False; IgnoreMaskAtFolderNames: Boolean = True);
procedure LFindAllFiles(AParentFolder: String);
var LSearchRec: TSearchRec;
begin
if FindFirst(AParentFolder + '*', faAnyFile, LSearchRec) = 0 then
begin
repeat
if (LSearchRec.Name <> '.') and (LSearchRec.Name <> '..') then
begin
if LSearchRec.Attr and faDirectory = faDirectory then
begin
if AddFolderNames and
(IgnoreMaskAtFolderNames or Like(AnsiLowerCase(LSearchRec.Name), Mask)) then
FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(True));
if Recurse then
LFindAllFiles(AParentFolder + LSearchRec.Name + '\');
end
else if Like(AnsiLowerCase(LSearchRec.Name), Mask) then
FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(False));
end;
until FindNext(LSearchRec) <> 0;
FindClose(LSearchRec);
end;
end;
begin
Mask := AnsiLowerCase(Mask);
LFindAllFiles(IncludeTrailingPathDelimiter(RootFolder));
end;