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

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

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

Beitrag 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...
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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?
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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 
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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:
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Arrag0n
Beiträge: 32
Registriert: 24.06.2005 20:49
Wohnort: Austria
Kontaktdaten:

Beitrag von Arrag0n »

Daaaaanke!

Dein Beitrag hat mir sehr geholfen.. :allright:

Arrag0n
Aus den Steinen, die einem in den Weg gelegt werden, kann man Schönes bauen.
Antworten