Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi FindNext Reihenfolge (https://www.delphipraxis.net/52130-findnext-reihenfolge.html)

Patrick 24. Aug 2005 09:45


FindNext Reihenfolge
 
Hallo,

Ich möchte zwei Ordner vergleichen. Dazu verwende ich FindNext (und was so dazugehört). Allerdings gibt FindNext den Inhalt der zwei Ordner in unterschiedlicher Reihenfolge aus, was dazu führt, dass mein optimierter Algorithmus nicht funktioniert.

Kann ich das ändern? Und nach welcher Gesetzmäßigkeit liest FindNext die Dateien?

Wenn ich ein und den selben Ordner mit einander vergleiche hat er die gleiche Reihenfolge, was auch logisch ist, da es ja der selbe Ordner ist. Jetzt nehme ich aber einen anderen Ordner, mit dem selben Inhalt: Hier hat der Inhalt aber eine andere Reihenfolge... Warum?

Olli 24. Aug 2005 09:54

Re: FindNext Reihenfolge
 
Auch wenn man wohl annehmen kann, daß FindNext nach den Namen geht, so ist die keineswegs festgelegt. FindNext ist übrigens ein Wrapper für die API-Funktion MSDN-Library durchsuchenFindNextFile() womit dies hier eindeutig eine API-Frage ist.

Du kannst also die o.g. Annahme machen, solltest dir aber im Klaren sein, daß Windows auch irgendwann mal die Dateien nach Datum, Mondphase, Sternzeichen oder File-ID zurückgeben könnte.

Muetze1 24. Aug 2005 09:57

Re: FindNext Reihenfolge
 
Seit CP/M und DOS Zeiten werden die Einträge in der Reihenfolge zurück geliefert, wie sie in der Zuordnungstabelle gefunden werden - und das ist meist quer durcheinander. Norton SpeedDisk hatte damals z.B. die Einträge für die einzelnen Ordner alphabetisch sortiert in den Zuordnungstabellen, damit das Betriebssystem nicht mehr so lange sortieren musste beim anzeigen.

RavenIV 24. Aug 2005 10:02

Re: FindNext Reihenfolge
 
Zitat:

Zitat von Olli
Auch wenn man wohl annehmen kann, daß FindNext nach den Namen geht, so ist die keineswegs festgelegt. FindNext ist übrigens ein Wrapper für die API-Funktion MSDN-Library durchsuchenFindNextFile() womit dies hier eindeutig eine API-Frage ist.

Du kannst also die o.g. Annahme machen, solltest dir aber im Klaren sein, daß Windows auch irgendwann mal die Dateien nach Datum, Mondphase, Sternzeichen oder File-ID zurückgeben könnte.

aus der MSDN:
Zitat:

The order in which this function returns the file names is dependent on the file system type. With the NTFS file system and CDFS file systems, the names are returned in alphabetical order. With FAT file systems, the names are returned in the order the files were written to the disk, which may or may not be in alphabetical order.
falls du also nicht NTFS hast, bekommst du die files in der reihenfolge, wie sie auf der platte erstellt wurden.

Olli 24. Aug 2005 10:17

Re: FindNext Reihenfolge
 
Zitat:

Zitat von RavenIV
falls du also nicht NTFS hast, bekommst du die files in der reihenfolge, wie sie auf der platte erstellt wurden.

Was sich aber vermutlich am (durchaus änderbaren) Dateidatum festmachen wird :zwinker: ...

DP-Maintenance 24. Aug 2005 10:53

DP-Maintenance
 
Dieses Thema wurde von "Daniel" von "Object-Pascal / Delphi-Language" nach "Windows API / MS.NET Framework API" verschoben.

SirThornberry 24. Aug 2005 11:15

Re: FindNext Reihenfolge
 
was hindert einen daran das Ergebnis von FindFirst etc. in eine Stringlist zu packen, diese zu sortieren und dann zu vergleichen?

Christian Seehase 24. Aug 2005 15:45

Re: FindNext Reihenfolge
 
Moin Patrick,

ich kenne jetzt Deinen Algorithmus nicht, und weiss natürlich auch nicht die Kriterien des Vergleiches, aber warum nimmst Du nicht das Ergebnis aus Verzeichnis 1 und versuchst diese Datei bzw. dieses Verzeichnis in Verzeichnis 2 zu finden, um es mal vereinfacht auszudrücken.
Entweder es ist da oder nicht.
In ersterem Falle kannst Du dann noch nach weiteren Kriterien vergleichen.
So bist Du völlig unabhängig von der Reihenfolge.

Patrick 25. Aug 2005 08:40

Re: FindNext Reihenfolge
 
Zitat:

The order in which this function returns the file names is dependent on the file system type. With the NTFS file system and CDFS file systems, the names are returned in alphabetical order. With FAT file systems, the names are returned in the order the files were written to the disk, which may or may not be in alphabetical order.
So machen meine Beobachtungen Sinn, aber das ist garichtmal schlimm. Dann funktioniert mein System halt nur auf NTFS...(also das Gelbe vom Ei ist das ja nicht...)


@SirThornberry
So habe ich es bei meinem alten Algorithmus gemacht, allerdings ist der langsam und bei weitem nicht so hübsch, wie der neue.

@Christian Seehase
Also mein Algorithmus gleicht zwei Ordner so ab, dass er mir nacher sagt, wo welche Datei zu viel ist bzw. welche wo neuer ist. Mit diesen Informationen kann ich z.B. ein Backup meiner Eigenen Dateien machen, ohne jedesmal alles auf eine Backup-Festplatte kopieren zu müssen. Somit kopiere ich nur noch Dateien, die vom Änderungs-Datum her neuer sind, oder Dateien, die neu dazu gekommen sind.

Olli 25. Aug 2005 08:50

Re: FindNext Reihenfolge
 
Und wes Grundes denkst du, sei es ineffektiv es so zu machen wie andere oben vorschlugen (besonders gefällt mir Christians Idee dabei)? Weißt du eigentlich wieviel das OS macht, während es "nichts" macht? Glaube mir, da ist das Auflisten mehrerer Dateien einfach lächerlich dagegen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr.
Seite 1 von 2  1 2      

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