Im Ideal gäbe es einen "Befehl", mit dem man dem SMB-Treiber sagen kann, er solle der/die/das Cache aktualisieren, welchen man vor dem Auflisten ausführt.
Oder mal so probieren. (auch wenn es nicht die zuverlässigste/beste Lösung ist)
Delphi-Quellcode:
First := True;
repeat
if First then begin
Count := -1;
First := False;
end else
Count := FileList.Count;
FileList.Clear;
ErrorCode := FindFirst(FileName, faAnyFile, SR);
if ErrorCode = S_OK Then begin
try
repeat
FileList.Add(SR.Name);
ErrorCode := FindNext(SR);
if ErrorCode <> ERROR_NO_MORE_FILES then
RaiseLastOSError(ErrorCode);
until ErrorCode = S_OK;
finally
FindClose(SR);
end;
end else if (ErrorCode <> ERROR_FILE_NOT_FOUND) and (ErrorCode <> ERROR_PATH_NOT_FOUND) then
RaiseLastOSError(ErrorCode);
Sleep(500);
until FileList.Count = Count;
Vielleicht noch mit einem Limit an Loops, falls man auf ein sich ständig veränderndes Verzeichnis trifft.