Recursive Suche mit scandir - Druckversion +- AmiBlitz³ (https://www.amiblitz.de/community) +-- Forum: AmiBlitz³ (https://www.amiblitz.de/community/forum-3.html) +--- Forum: Questions & Answers (https://www.amiblitz.de/community/forum-7.html) +--- Thema: Recursive Suche mit scandir (/thread-111.html) |
Recursive Suche mit scandir - tero - 20.11.2014 Hi nochmal. Ich versuche gerade ein listview mit Dateinamen zu füllen, das klappt mit dos_scandir auch ganz gut. Nur würde ich die Suche gerne Recursive machen, also inkl. den Dateien in Untergeordneten Schubladen. Scandir scheint das aber nicht zu unterstützen(?), gibt es dafür eine andere/bessere Methode oder muss ich die recursive suche mithilfe von dos_scandir selber machen? Re: Recursive Suche mit scandir - tero - 20.11.2014 Hier ist mein Aktueller versuch. DH0 wird richtig ausgelesen, wenn er beginnt die Schubladen zu Scannen bleibt er aber in einer endlosschleife. Es beginnt in 'c' und bleibt dann dort stecken. Laut einem älteren BB guide sollten functions sich selbst aufrufen können, insofern übersehe ich wohl etwas. Jemand eine Idee wo der Haken ist? EDIT: das ; im in den 'If item > ""' Zeilen wird beim posten eingefügt, das ist im original code natürlich nicht vorhanden. [ab3]Function icScanDir {icPath2.s} SHARED *engine *EnvList.tuiListView = (.tuiListView)ntui_GetObjectByID{*engine,"LVenv"} ; finde ListView flags.l = (#dos_scan_files|#dos_scan_sorted) Repeat item.s = dos_ScanDir{icPath2,"(#?.info)",flags} If item > "" NPrint item ntui_AddListItem{*EnvList,-1,item,0,1234,0} EndIf Until item = "" Function Return 0 End Function Function icFindDir {icPath.s} icScanDir {icPath} NPrint icPath flags.l = (#dos_scan_dirs|#dos_scan_sorted) Repeat item.s = dos_ScanDir{icPath,"",flags} If item > "" NPrint item icFindDir {item} EndIf Until item = "" Function Return 0 End Function ; Aufgerufen wird das ganze mit: icFindDir {dh0:}[/ab3] BTW: Mit den NPrint hab ich die schleifen kontrolliert. Aus irgendeinem Grund finded AB meine reqtools.lib nicht und lässt mich den debugger nicht benutzen. Ich hab aber auch noch nicht nachgeschaut woran das liegen könnte. Re: Recursive Suche mit scandir - Blackbird - 20.11.2014 Hallo, Jupp, die Frage hatten wir schonmal. http://www.amiblitz.de/community/viewtopic.php?f=5&t=39 Re: Recursive Suche mit scandir - tero - 21.11.2014 Oh ha, den Thread hatte ich sogar gelesen. Ich hatte nur vergessen das es da auch um untergeordnete Schubladen ging. :oops: Ich hab das auch erstmal sein lassen, gibt noch genug anderes das ich im Moment noch Probieren/Testen möchte. Obwohl ich noch versuchen wollte die Ordnerpfade in einer Liste zu speichern. Also mit dem rootverzeichnis in der liste anfangen, die erste Schubladen nach untergeordneten durchsuchen und an die Liste anfügen. usw usw, wenn ich es richtig verstanden habe muss ich Listen aber erst mit einer festen größe Dimensionieren, das scheint mir ungünstig zu sein. Zusätzlich hätte man auch keine anständige Sortierung der Verzeichnisse, man müßte die Pfade, je nach Anwendung, erst wieder analysieren, rausuchen und/oder umsortieren. Re: Recursive Suche mit scandir - Blackbird - 21.11.2014 Du kannst schon im Listview navigieren wie du willst, auch wenn die Unterverzeichnisse nicht gleich sichtbar sind. Du brauchst eben nur noch einen Parentbutton der dich dann wieder eine Ebene höher bringt. So mach ich das in Copacabana auch...Oder Thilo in AIDE... Du kannst Listen auch dynamisch anlegen Re: Recursive Suche mit scandir - tero - 21.11.2014 Dynamische Listen find ich gut. Da merkt man das ich für diesen kleinkram in einem alten BB2 Guide stöbere Ein Parent button ist in meinem Fall leider nicht brauchbar. Ich hätte gerne eine Liste mit allen .Info files die auf der Systempartition vorhanden sind. Ich wollte ein Programm schreiben mit dem ich ein Icontheme speichern kann. Erst eine Liste aller info's sammeln, Icons tauschen und aus der Liste entfernen. Wenn die Liste leer ist alle Info's per lha speichern. Das wäre ein schönes kleines Programm um mich an die Sprache zu gewöhnen. Da ist viel kleinkram in so einem Programm, z.B. beim anwenden des Themes prüfen ob das jeweilige Icon existiert usw. Das erste Projekt sollte ja auch kein zu großes sein. :mrgreen: Re: Recursive Suche mit scandir - Der Wanderer - 21.11.2014 scan_Dir verwendet eine Global liste, deshalb kann man es nicht rekursiv aufrufen. Sonst bräuchte die Funktion einen "Handle". Sorry wenn die Docu das nicht erwähnt. Hier ein Beispiel Code wie du das machen kannst. [ab3]optimize 5 XINCLUDE "dos.include.ab3" Statement scan{path.s} lock.l = Lock_(&path.s,#ACCESS_READ) If lock=0 Then Statement Return *fib.FileInfoBlock = AllocDosObject_(#DOS_FIB,#TAG_DONE) If *fib=0 Then Statement Return If Examine_ (lock,*fib) While ExNext_(lock,*fib) filename.s = dos_AddPart{path.s,Peek.s(&*fib\fib_FileName)} If *fib\fib_DirEntryType<0 NPrint "do something with ",filename.s Else scan{filename.s} End If Wend End If UnLock_ lock FreeDosObject_ #DOS_FIB,*fib End Statement scan{"Sys:"} End[/ab3] Code ohne Formatierungsfehler: Code: optimize 5 Re: Recursive Suche mit scandir - Blackbird - 21.11.2014 dos_Scandir kann das nicht. Das mußt du dir selber bauen. Du solltest auch eher die Hilfe und Docs anschauen die Ab3 mitbringt, da hat sich viel geändert. Re: Recursive Suche mit scandir - Blackbird - 21.11.2014 Uiiii alles Nachteulen hier Der Wanderer war schneller beim Antworten, und auch gleich mit einer Lösung... Re: Recursive Suche mit scandir - Der Wanderer - 21.11.2014 Ich bin keine Nachteule (mehr). Ich wohne in Sillicon Valley, da ist es gerade 4 Uhr nachmittags. |