Seite 1 von 1

Verzeichnis Memorystick auslesen

Verfasst: 09.02.2008 18:45
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

Verfasst: 09.02.2008 19:41
von roherter
Du kannst es auch in ein Array einlesen und über Sortarray Alphabetisch sortieren und dann ausgeben!

Re: Verzeichnis Memorystick auslesen

Verfasst: 09.02.2008 20:32
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.

Verfasst: 09.02.2008 20:34
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.

Verfasst: 09.02.2008 21:16
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

Verfasst: 09.02.2008 22:31
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.

Verfasst: 10.02.2008 12:58
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

Verfasst: 10.02.2008 13:08
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 ?

Verfasst: 10.02.2008 13:12
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