Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   FindFirst: Welche Datei wird gefunden? (https://www.delphipraxis.net/137089-findfirst-welche-datei-wird-gefunden.html)

alzaimar 14. Jul 2009 08:18


FindFirst: Welche Datei wird gefunden?
 
Ein Zulieferer iost per TCP mit unserer Software verbunden und schickt 1x pro Sekunde ein XML-Telegramm. Wird er es nicht los, soll er es zwischenspeichern. Er macht das, indem er das XML einfach in eine Datei speichert. Der Dateiname enthält Datum und Uhrzeit, sodaß die Dateinamen (nach Namen sortiert) so aufgeführt sind, das die älteste Datei 'oben' ist.

Er meint nun, es reicht, per FindFirst nach '*.XML') zu suchen. FindFirst würde schon automatisch die älteste Datei liefern. diese wird dann per TCP verschickt und gelöscht...

Meine Frage: Stimmt das?
Wenn ich die 'erste' Datei in der Directory nehme, verschicke und lösche, entsteht im Verzeichnis ein 'Loch' an der Stelle, das beim nächsten 'CreateFile' wieder verwendet wird, oder?

Also: Liefert FindFirst garantiert die älteste Datei, oder nur irgend eine?

Reinhard Kern 14. Jul 2009 08:37

Re: FindFirst: Welche Datei wird gefunden?
 
Zitat:

Zitat von alzaimar
Also: Liefert FindFirst garantiert die älteste Datei, oder nur irgend eine?

Hallo,

i.A. liefern FindFileFirst/Next die Dateien so, wie sie bei einem DIR erscheinen, also in der Reihenfolge der Directory-Einträge. Die ist aber nur bekannt, wenn man ein Directory neu anlegt und füllt, und auch darauf würde ich mich nicht verlassen: es kann sich ja um ganz verschiedene Dateisysteme handeln, auch Unix usw. Im Prinzip muss man also davon ausgehen, dass die Reihenfolge zufällig ist. Die grundlegenden Algorithmen sind schon reproduzierbar, aber nachvollziehen kann man sie praktisch nicht, man kann auch keinen Einfluss darauf nehmen.

Gruss Reinhard

Stormy 14. Jul 2009 08:51

Re: FindFirst: Welche Datei wird gefunden?
 
Hi,

du könntest mit FindData die variablen ftCreationTime, ftLastAccessTime und/oder ftLastWriteTime auslesen, dir das dann Mappen und das dann durchlaufen.


Gruß
Stormy

semo 14. Jul 2009 09:26

Re: FindFirst: Welche Datei wird gefunden?
 
Dies ist aber auch unsicher,
denn wie schon gesagt wurde, wird jede Sekunde eine Datei gespeichert.
Was also wenn genügend Dateien vorhanden sind, der Durchlauf des Codes länger als eine Sekunde dauert und dann 3 neue Dateie hinzugekommen sind?

himitsu 14. Jul 2009 09:35

Re: FindFirst: Welche Datei wird gefunden?
 
nja, im Grunde das ganze Verzeichnis auslesen (bzw. alles was zu einer bestimmten Maske paßt) und in einer Liste speichern, dann diese Liste sortieren und abarbeiten ... danach dann wieder das Verzeichnis auslesen und von vorne beginnen ...

Lannes 14. Jul 2009 10:25

Re: FindFirst: Welche Datei wird gefunden?
 
Hallo,

ja zu Beginn einmal alle lesen, die älteste Datei abarbeiten/löschen, aus dem Dateinamen Datum und Uhrzeit extrahieren und merken. Im weiteren Verlauf Dateinamen aus gemerktem Datum und Uhrzeit + 1 Sekunde bilden und solange mit FindFirst anhand des gebildeten Dateinamens suchen bis die nächste gefunden wird, usw. usw. ...

alzaimar 14. Jul 2009 21:47

Re: FindFirst: Welche Datei wird gefunden?
 
Hi,

danke für die vielen Ideen. Ich würde das gar nicht so machen, sondern eine DB nehmen (SQLite reicht ja, 1x PK, 1xTimestamp, 1xBLOB) aber der Kunde macht das nun mal so und ich wunder mich, das ich Daten wie Kraut und Rüben bekomme.

Stellt Euch einfach vor, der Typ hat seit 10 Tagen nix geschickt (=864000 Dateien)... Irgendwie suboptimal, diese Strategie... :mrgreen:

Der Beitrag #2 hat meine Frage beantwortet, denke ich. Ich werde ihm also verklickern, das das so net funzen tut.

@Lannes: Eine mögliche Strategie für den Kunden. Werde ich ihm so vorschlagen.

Echt ein geiles Forum :dp:

SirThornberry 14. Jul 2009 21:51

Re: FindFirst: Welche Datei wird gefunden?
 
ich glaub im msdn steht es in etwa so das die Reihenfolge nicht definiert ist und dann kommt eine Erklärung wie es sich normalerweise bei ntfs verhält. Aber wie bereits erwähnt ist die Reihenfolge nicht festgelegt und von Dateisystem zu Dateisystem verschieden.

Luckie 14. Jul 2009 22:04

Re: FindFirst: Welche Datei wird gefunden?
 
Hier noch ein paar Informationen dazu:
hy do NTFS and Explorer disagree on filename sorting?
Why do files and directories with no time/date mess up sorting in Explorer?

alzaimar 14. Jul 2009 22:06

Re: FindFirst: Welche Datei wird gefunden?
 
Ach Leute, sogar mit Quellenangabe. Weiss, gar nicht, was ich sagen soll...

Doch....


Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz