Verzeichnis Memorystick auslesen

Anfängerfragen zum Programmieren mit PureBasic.
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Verzeichnis Memorystick auslesen

Beitrag von Lord »

Hallo @all!

Wenn ich das Verzeichnes (m)eines Memorysticks auslese, erhalte ich die Verzeichnisse in einer ungeordneten Reihenfolge. Wenn ich eine CD oder die Festplatte auslese ist die Ausgabe immer alphabetisch geordnet.

Ist das grundsätzlich so bei Memorysticks oder nur bei den 3 Sticks, die ich hier zum Testen zur Verfügung habe?

Läßt sich die Auslesereihenfolge vielleicht durch ein Flag beeinflussen, so daß ich immer eine alphabetisch sortierte Ausgabe erhalte?

Hiermit habe ich getestet:

Code: Alles auswählen

;Directory$="N:\"
Directory$ = "D:\"
If ExamineDirectory(0, Directory$, "*.*")
  While NextDirectoryEntry(0)
    If DirectoryEntryType(0) <> #PB_DirectoryEntry_File
      Debug DirectoryEntryName(0)
    EndIf
  Wend
  FinishDirectory(0)
EndIf
Gruß

Lord
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Du kannst es auch in ein Array einlesen und über Sortarray Alphabetisch sortieren und dann ausgeben!
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: Verzeichnis Memorystick auslesen

Beitrag von Fluid Byte »

Lord hat geschrieben:Wenn ich das Verzeichnes (m)eines Memorysticks auslese, erhalte ich die Verzeichnisse in einer ungeordneten Reihenfolge.
Ich glaube das liegt an der Reihenfolge wie die Verzeichnisse erstellt wurden. Bei mir sind auch Verzeichnisse von Festplatten und CD's ungeordnet, nicht nur Memorysticks.
Lord hat geschrieben:Läßt sich die Auslesereihenfolge vielleicht durch ein Flag beeinflussen, so daß ich immer eine alphabetisch sortierte Ausgabe erhalte?
Nein, dafür bist du selbst verantwortlich. Es kommt drauf an wie das Endprodukt aussehen soll. Ist das nur reine Debuginfo für die Entwicklung oder soll es vielleicht in eine Listbox oder ein List-View Control ausgegeben werden? Dort gibt es diverse Möglichkeiten der Sortierung.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Auch wenn du auf Festplatten eine vermeintlich alphabetisch geordnete Ausgabe erhälst, darfst du das nie als Selbstverständlich nehmen.
Wenn du auf eine alphabetische Reihenfolge angewiesen bist, musst du alle Ordner und Dateien in einer LinkedList oder einem Array speichern und dieses dann mit SortArray() oder SortLinkedList() sortieren.
Wenn du schon fit im Umgang mit LinkedLists bist, würde ich dir empfehlen, diese statt Arrays zu verwenden.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Beitrag von Lord »

Danke für alle Antworten.

Wenn ich das also richtig verstehe, habe ich demnach keine Möglichkeit, auf die Ausgabereihenfolge einzuwirken.

Bei mir erhalte ich nur bei den Memorysticks die unsortierte Ausgabe. Bei meinen beiden Festplatten mit insgesamt 5 Partitionen und von beiden CD-/ respektive DVD-Laufwerken erhalte ich immer sortierte Verzeichnisse zurück. Nur, wie bereits erwähnt, bei meinen Memorysticks ist die Reihenfolge unsortiert.
Ich lese die Verzeichnisse und die darin befindlichen Filenamen von Textdateien in ein TreeGadget ein. Desweiteren lese ich aus den Textfiles Informationen anhand bestimmter Kriterien und stelle diese in einem ListIconGadget dar. Dadurch ist die alphabetische Reihenfolge und damit die Darstellungsreihenfolge im ListIcon zweimal (Verzeichnisnamen und Textfilenamen) relevant.
Das Problem mit dem Stick war mir bis jetzt nur noch nicht aufgefallen, da es von den anderen Datenträgern keine Probleme gab.
Ich werde dann doch wohl zuerst die Verzeichnis- bzw. Textdateinamen in eine LinkedList einlesen und sortieren müssen, bevor ich sie entsprechend anzeige.
Nochmals Danke für die Antworten.

Gruß

Lord
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Ich hab gerade mal im PSDK geschmökert und mir den Infotext (Remarks) zu FindNextFile_() angeschaut (entspricht NextDirectoryEntry()).

Im letzen Absatz steht folgendes:
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.
Also lag ich mit meiner Vermutung gar nicht so falsch. Allerdings dürften alle neueren Festplatten wohl NTSF benutzen deshalb ist es ein wenig komisch. Das wirft eine andere Frage auf. Der Stick ist ja auch nichts anderes als eine Festplatte und hat doch auch ein eigenes Dateisystem. Sollte dieses FAT sein ist die Sache klar.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Beitrag von Lord »

Hallo Fluid Byte!

Danke für Deine Recherche.
Es trifft zu, daß meine USB-Sticks FAT bzw. FAT32 als Filesystem haben.
Danke an RSBasic und Scholly, die hier: http://www.purebasic.fr/german/viewtopic.php?t=15680 einen passenden Codeschnipsel zur Feststellung des Filesystems bereitgestellt hatten.

Gruß

Lord
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Lord hat geschrieben:Hallo Fluid Byte!
Danke an RSBasic und Scholly, die hier: http://www.purebasic.fr/german/viewtopic.php?t=15680 einen passenden Codeschnipsel zur Feststellung des Filesystems bereitgestellt hatten.
Ähm, du meinst du hast den Code rennen lassen, um das Dateisystem deines Sticks zu ermitteln ?
Meinst du nicht, ein simpler Rechtsklick auf das Laufwerk des Sticks im Explorer und dann "Eigenschaften" wäre einfacher gewesen ?
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Beitrag von Lord »

Natürlich wäre das einfacher gewesen, aber mein Programm wird keinen Rechtsklick machen können. :wink:
Ich habe deshalb gleich nach einer Lösung gesucht, die ich in mein Programm einbauen kann.

Gruß

Lord
Antworten