![]() |
Delphi-Version: 2007
FindFirst/FindNext auf Samba-Server findet nicht alle
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Ich habe ab und zu mal ein merkwürdiges Problem. Auf einem Samba-Server habe ich einen Ordner liegen, der teilweise 200-1000 Dateien beinhaltet. Diese werden von meinem Programm per FindFirst/FindNext gesucht und eingetragen. Zu 95% klappt das auch, aber hin und wieder findet er nur 2-3 Dateien, ohne Fehler. Startet man die Funktion erneut im gleichen Atemzug, findet er den Rest. Heute z.B. lagen 737 Dateien dort. Erster Start der Funktion hat er 2 Dateien gefunden, direkt danach die restlichen 735. Wie die Dateien aussehen, seht ihr im Anhang. Hier mal mein Code-Schnipsel:
Delphi-Quellcode:
Hat jemand auch schon mal so ein Phänomän gehabt? Irgendwie skurril...
:
: Begin FileName := Konst.ImportPfadKonstanten.XMLImport + 'INV*.*'; If FindFirst(FileName,faAnyFile,SR) = 0 Then Begin Repeat InvoiceDateien.Add(SR.Name); Until FindNext(SR) <> 0; FindClose(SR); Result := True; End Else Begin MessageDlg('Es konnten keine Import-Dateien im Pfad '+Konst.ImportPfadKonstanten.XMLImport+' gefunden werden!', mtWarning,[mbOK],0); Result := False; End; End; : : Stephan |
AW: FindFirst/FindNext auf Samba-Server findet nicht alle
Hast du deine Funktion mal die absoluten Pfade protokollieren lassen und z.B. mit der Ausgabe von
Code:
verglichen?
dir /s /b <verzeichnis>
MfG Dalai |
AW: FindFirst/FindNext auf Samba-Server findet nicht alle
Ein Cache-Problem?
Dein Programm liest schneller, als die Dateiliste vom Server kommt. Ist also schon vorher am Ende der gespeicherten Liste und denkt es geht nicht weiter. Mal das Result korrekt vollständig auswerten, falls es andere Gründe gibt?
Delphi-Quellcode:
ErrorCode := FindFirst(FileName, faAnyFile, SR);
if ErrorCode = S_OK Then begin try repeat InvoiceDateien.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 then RaiseLastOSError(ErrorCode); |
AW: FindFirst/FindNext auf Samba-Server findet nicht alle
Ja, das kling plausibel... Das mit dem Extra-Fehler auslesen könnte ich machen.
Mal angenommen, es würde tatsächlich der Cache sein, dann wäre die Frage, wie könnte ich das am besten ausbremsen. Vielleicht mit einem Delay in der Schleife..?? |
AW: FindFirst/FindNext auf Samba-Server findet nicht alle
Samba? Aktuellest Version mit allen Fixes.
Wir haben auch schon die erfahrungen (mit NAS per SAMBA) das (ältere Versionen?) sich nicht 100% wie ein Windows-Server verhält, also noch merkbare Fehler hat. |
AW: FindFirst/FindNext auf Samba-Server findet nicht alle
Ok, das probiere ich auch mal aus, ob ich das was Neues bekomme...
|
AW: FindFirst/FindNext auf Samba-Server findet nicht alle
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:
Vielleicht noch mit einem Limit an Loops, falls man auf ein sich ständig veränderndes Verzeichnis trifft.
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; |
AW: FindFirst/FindNext auf Samba-Server findet nicht alle
Vielen Dank. Ich werde das mal ausprobieren. Nach einer Woche kann ich ein Resultat senden. ;-)
... achso, das Update auf eine aktuellere Version des Samba-Servers hat leider nicht das gewünschte Ergebnis erzielt. Stephan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz