Seite 1 von 1

Rekursiv...aber nicht vollständig..?

Verfasst: 23.12.2005 12:39
von Tafkadasom2k5
Hey!
Ich habe hier nen rekursiven Aufruf meiner Procedure vom letzten mal...
Aber irgendwie geht die nicht ALLE Ordner einmal durch.Sondern fängt ab 2Ordnern einfach an, die Unterordner zu ignorieren...

WTF?

Code: Alles auswählen

newlist alledateien.s()
Procedure Fill_List(Directory.s)
  Ordner = ExamineDirectory(#PB_Any,Directory,"*.*")   ;Alle Dateien Durchsuchen
  
  Repeat                             ;wird wiederholt, bis das Ende des Ordners erreicht ist
    Test = NextDirectoryEntry()      ;Test enspricht hiernach 1 oder 2-d.H., dass man daran erkent ob es ne Datei oder n Ordner ist.
    If Test = 1
      If UCase(GetExtensionPart(DirectoryEntryName())) = "MP3" Or UCase(GetExtensionPart(DirectoryEntryName())) = "WMA" ;nur zur Liste hinzufügen, wenn die Dtei eine mp3 ist.
        AddElement(alledateien())
        alledateien() = Str(Ordner) + ";" + "MP3" + ";" + Directory + "\" + DirectoryEntryName() + ";" + DirectoryEntryName() + ";" + Str(DirectoryEntrySize())
      EndIf
      
    EndIf
    If Test = 2 And DirectoryEntryName() <> "." And DirectoryEntryName() <> ".."
      AddElement(alledateien())
      alledateien() = Str(Ordner) + ";" + "DIR" + ";" + Directory + "\" +  DirectoryEntryName() + ";" + DirectoryEntryName() + ";" + Str(DirectoryEntrySize())
      NewDirectory.s = Directory + DirectoryEntryName()
      Fill_List(NewDirectory)
      UseDirectory(Ordner)
    EndIf
    
    
  Until Test = 0
  
EndProcedure

Fill_List(C:\)
Foreach alledateien()
 debug alledateien()
Next
Bin auf alle Lösungsansätze gespannt...

Verfasst: 23.12.2005 14:20
von Batze
Hmm, stimmt.
Wie kommt das? :?

Edit:

Code: Alles auswählen

newlist alledateien.s()
Procedure Fill_List(Directory.s)
  Ordner = ExamineDirectory(#PB_Any,Directory,"*.*")   ;Alle Dateien Durchsuchen
 
  Repeat                             ;wird wiederholt, bis das Ende des Ordners erreicht ist
    Test = NextDirectoryEntry()      ;Test enspricht hiernach 1 oder 2-d.H., dass man daran erkent ob es ne Datei oder n Ordner ist.
    If Test = 1
      If UCase(GetExtensionPart(DirectoryEntryName())) = "MP3" Or UCase(GetExtensionPart(DirectoryEntryName())) = "WMA" ;nur zur Liste hinzufügen, wenn die Dtei eine mp3 ist.
        AddElement(alledateien())
        alledateien() = Str(Ordner) + ";" + "MP3" + ";" + Directory + "\" + DirectoryEntryName() + ";" + DirectoryEntryName() + ";" + Str(DirectoryEntrySize())
      EndIf
     
    EndIf
    If Test = 2 And DirectoryEntryName() <> "." And DirectoryEntryName() <> ".."
      AddElement(alledateien())
      alledateien() = Str(Ordner) + ";" + "DIR" + ";" + Directory + "\" +  DirectoryEntryName() + ";" + DirectoryEntryName() + ";" + Str(DirectoryEntrySize())
      NewDirectory.s = Directory + "\" + DirectoryEntryName() ; !!!!!!! Hier lag dein Fehler: Ein vergessener "\"!!!!!!
      Fill_List(NewDirectory)
      UseDirectory(Ordner)
    EndIf
   
   
  Until Test = 0
 
EndProcedure

Fill_List("C:\")
Foreach alledateien()
 debug alledateien()
Next
Der sollte gehen.

Verfasst: 23.12.2005 14:49
von Tafkadasom2k5
Hey Danke!
Soweit gehts!
Aber hats du dir mal den Debug angeschaut?
Da sind z.T. Ordner\\Ordner1...
Also mit DOPPELBACKSLASH getrennt..woran liegt denn das?

Gr33tz
Tafkadasom2k5

Verfasst: 23.12.2005 14:54
von ts-soft
Tafkadasom2k5 hat geschrieben: Also mit DOPPELBACKSLASH getrennt..woran liegt denn das?

Gr33tz
Tafkadasom2k5
Laufwerke werden von Windows immer mit BackSlash zurückgegeben, wohingegen Unterordner immer ohne.
Mußte also noch ausfiltern!

Verfasst: 23.12.2005 15:07
von Tafkadasom2k5
Aber so gesehen, wennb ich ab dem LOKALEN Ordner D: suche

D:\Programme\Shareaza\Downloads

suche, dann ist doch kein extra Laufwerk drangebunden?Also ich habe nur n Ordner auf der Festplatte dursucht..


Gr33tz
Tafkadasom2k5

Verfasst: 23.12.2005 15:16
von ts-soft
>> D:\Programme\Shareaza\Downloads
Wird gefunden:
D:\
D:\Programme
D:\Programme\Shareaza
D:\Programme\Shareaza\Downloads

Durch anhängen von einem Backslash, sieht der erste Treffer so aus:
D:\\ :wink:

Verfasst: 23.12.2005 15:18
von Tafkadasom2k5
Aber WARUM geht das denn nicht ohne?Erst wenn ich diesen Backslah manuell dranhänge funktioniert der komplette rekursive Aufruf!
Das ist ja das Merkwürdige?

Verfasst: 23.12.2005 15:28
von ts-soft
Machs einfach so, warum Windows nicht immer ein Backslash anhängt ist mir auch nicht klar :?

Code: Alles auswählen

NewList alledateien.s()
Procedure Fill_List(Directory.s)
  Ordner = ExamineDirectory(#PB_Any,Directory,"*.*")   ;Alle Dateien Durchsuchen
 
  Repeat                             ;wird wiederholt, bis das Ende des Ordners erreicht ist
    Test = NextDirectoryEntry()      ;Test enspricht hiernach 1 oder 2-d.H., dass man daran erkent ob es ne Datei oder n Ordner ist.
    If Test = 1
      If UCase(GetExtensionPart(DirectoryEntryName())) = "MP3" Or UCase(GetExtensionPart(DirectoryEntryName())) = "WMA" ;nur zur Liste hinzufügen, wenn die Dtei eine mp3 ist.
        AddElement(alledateien())
        alledateien() = Str(Ordner) + ";" + "MP3" + ";" + Directory + "\" + DirectoryEntryName() + ";" + DirectoryEntryName() + ";" + Str(DirectoryEntrySize())
      EndIf
     
    EndIf
    If Test = 2 And DirectoryEntryName() <> "." And DirectoryEntryName() <> ".."
      AddElement(alledateien())
      alledateien() = Str(Ordner) + ";" + "DIR" + ";" + Directory + "\" +  DirectoryEntryName() + ";" + DirectoryEntryName() + ";" + Str(DirectoryEntrySize())
      NewDirectory.s = Directory + "\" + DirectoryEntryName() ; !!!!!!! Hier lag dein Fehler: Ein vergessener "\"!!!!!!
      NewDirectory = ReplaceString(NewDirectory, "\\", "\")
      Fill_List(NewDirectory)
      UseDirectory(Ordner)
    EndIf
   
   
  Until Test = 0
 
EndProcedure

Fill_List("C:\")
ForEach alledateien()
 Debug alledateien()
Next 

Verfasst: 23.12.2005 19:13
von Tafkadasom2k5
OK, soweit alles klar...
Aber kann es sein, dass er erst die Unterordner, und danach auch wieder die oberordner durchsucht?Oder bin ich ein wenig kirre..^^ :?

Irgendwie sind Dateien in meiner Liste von meinem Windows ORdner vorhanden, auch wenn er nur ganz kurz läd.

Sehr misteriös :freak: :freak:

Verfasst: 04.02.2006 08:40
von Arrag0n
Daaaaanke!

Dein Beitrag hat mir sehr geholfen.. :allright:

Arrag0n