Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Listenreihenfolge bei dir und auch bei Findfirst/FindNext (https://www.delphipraxis.net/74583-listenreihenfolge-bei-dir-und-auch-bei-findfirst-findnext.html)

Klaus01 5. Aug 2006 17:55


Listenreihenfolge bei dir und auch bei Findfirst/FindNext
 
Einen schönen Nachmittag,

für einen Bildbetrachter lese ich alle Dateien eines Verzeichnisses ein
und schreibe sie in eine recordbasierte Datei..

Die Datei befülle ich in einer Schleife
mit FindFirst und FindNext.

Delphi-Quellcode:
function TForm1.getPictures(StartDir:String;recursive:Boolean):Integer;
var
  SearchRec : TSearchrec;
begin
  result := 0;
  if FindFirst(StartDir+'\*.jpg',faAnyFile,SearchRec) = 0 then
    begin
       imageSet.filePath:=ExtractFilePath(StartDir);
       imageSet.fileName:=ExtractFileName(SearchRec.Name);
       write(BatchFile,ImageSet);
       inc(result);
       While FindNext(SearchRec) = 0 do
         begin
           imageSet.filePath:=ExtractFilePath(StartDir);
           imageSet.fileName:=ExtractFileName(SearchRec.Name);
           write(BatchFile,ImageSet);
           inc(result);
         end;
       FindClose(SearchRec);
    end;

    if recursive then
      if (FindFirst(StartDir+'*.*',faDirectory,SearchRec)=0) then
        begin
          repeat
            if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
              getPictures(StartDir+SearchRec.Name,true);
          until FindNext(SearchRec)<>0;
          FindClose(SearchRec);
        end;

end;

Mein Problem ist, die Dateien werden nicht in
der korrekten Reihenfolge eingelesen.

Die gleiche Reihenfolge sehe ich aber auch
wenn ich wenn ich dem Verzeichnis das dir Kommando
ausführe:
Zitat:

19.05.2004 05:50 599.986 AU010026.jpg
19.05.2004 05:50 1.219.131 AU010027.jpg
19.05.2004 05:50 1.033.227 AU010028.jpg
19.05.2004 05:50 915.389 AU010029.jpg
19.05.2004 05:50 693.484 AU010030.jpg
19.05.2004 05:50 651.635 AU010031.jpg
19.05.2004 05:50 608.949 AU010032.jpg
19.05.2004 05:50 1.011.843 AU010033.jpg
19.05.2004 05:50 949.296 AU010035.jpg
19.05.2004 05:50 761.439 AU010036.jpg
19.05.2004 05:50 898.526 AU010037.jpg
19.05.2004 05:50 898.624 AU010038.jpg
19.05.2004 06:04 684.055 AU020035.jpg
19.05.2004 06:03 445.374 AU020002.jpg
19.05.2004 06:03 913.236 AU020003.jpg
Die rot markierte Datei sollte meines Erachtens erst einiges später
in der Liste auftauchen.

Im explorer werden die Dateien in der richtigen Reihenfolge aufgelistet.

Hat da jemand eine Lösung dazu, oder ist es das beste die
Dateinamen in eine StringList zu schreiben und diese zu sortieren?

OS ist w2k SP4

Grüße
Klaus

marabu 5. Aug 2006 18:03

Re: Listenreihenfolge bei dir und auch bei Findfirst/FindNex
 
Hallo Klaus,

die API-Funktionen hinter FindFirst() etc. lesen die Verzeichnisse wie eine typisierte Datei - record sequentiell. Wurde irgendwann ein Slot freigegeben (z.B. durch Löschen einer Datei oder einer temporären Datei) wird die nächste neue Datei dort eingetragen. Die gewünschte Ordnung wird durch die Shell hergestellt. Oder in deinem Fall durch dein Programm.

Grüße vom marabu

Klaus01 5. Aug 2006 18:06

Re: Listenreihenfolge bei dir und auch bei Findfirst/FindNex
 
Hallo marabu,

das hilft mir schon mal weiter.
Danke für Deine Auskunft.

Grüße und ein schönes Wochenende
Klaus

himitsu 7. Aug 2006 11:52

Re: Listenreihenfolge bei dir und auch bei Findfirst/FindNex
 
Unter XP scheint es aber entwerder im Dateisystem schon sortiert zu sein, oder (was ich weniger glaube) der sortiert beim auslesen (z.B. per FuindFirst/FindNext).

Jedenfalls kommen bei mir da immer die Dateien alphabetisch sortiert raus.

Bernhard Geyer 7. Aug 2006 11:58

Re: Listenreihenfolge bei dir und auch bei Findfirst/FindNex
 
Könnte die direkte Sortiermöglichkeit des BS vom Dateisystem (NTFS/FAT) abhängig sein?
Ich glaub da gab es schon mal einen Thread ... :gruebel:

SirThornberry 7. Aug 2006 11:59

Re: Listenreihenfolge bei dir und auch bei Findfirst/FindNex
 
laut msdn hängt es vom Dateisystem ab wie/ob sortiert wird.

Klaus01 7. Aug 2006 16:18

Re: Listenreihenfolge bei dir und auch bei Findfirst/FindNex
 
Ja das Phänomen tritt bei mir auch, was ich jetzt erst bemerkt habe; auch nur unter FAT32 auf.
FAT32 deshalb weil ich auch noch von Linux darauf lesend und schreibend zugreife.

Danke für die Hilfe!

Grüße
Klaus

himitsu 7. Aug 2006 17:16

Re: Listenreihenfolge bei dir und auch bei Findfirst/FindNex
 
Zitat:

Zitat von Bernhard Geyer
Könnte die direkte Sortiermöglichkeit des BS...

Als am BS liegt es definitiv nicht, denn FindFirst/FindNext sortiert Alphabetisch und der Explorer nach dieser komischen und verabscheuungswürdigen humanen Variante (macht sich echt besch**, bei hexadezimalen Dateinamen -.-'' )

DGL-luke 7. Aug 2006 17:22

Re: Listenreihenfolge bei dir und auch bei Findfirst/FindNex
 
@himitsu: :shock: das ist wirklich grausam

Luckie 7. Aug 2006 17:24

Re: Listenreihenfolge bei dir und auch bei Findfirst/FindNex
 
Guckuck: http://www.delphipraxis.net/internal...=419260#419260 ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 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