Page 1 of 2 1 2 LastLast
Results 1 to 15 of 23

Thread: Recursie zonder recursie: versie 1.1.2

  1. #1
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269

    Recursie zonder recursie: versie 1.1.2

    Hierbij een nieuwe versie van NLDFileSearch. Ik heb een extra WalkDir functie toegevoegd die geen gebruikt maakt van recursie maar wel alle subdirectories ook doorloopt, in feite dus een recursieve directory lijst zonder recursieve code . Handig voor mensen met gigantische harde schijven en mapstructuren, scheelt weer een hoop stack overflows... de oude methode is nog steeds bruikbaar met een nieuwe optie, alhoewel dit misschien overbodig is aangezien beiden hetzelfde bereiken. Ik heb meteen maar even de Ex-functies zoals in de todo stonden toegevoegd, en een conditional define toegevoegd om de Forms unit te elimineren voor kleine/console-projecten... ook heb ik de FoundFileHandler events verwijderd, wegens "bad coding practises". In plaats daarvan override ik de DoFoundFile functies wat iets netter is...


    Ik zou zeggen, kijk er even naar, en als je 'm goedkeurd mag ie wat mij betreft de VCS in
    Attached Files Attached Files
    Qui custodiet ipsos custodes

  2. #2
    2004-12-19 1.1.2: Unofficial update by PsychoMark
    Volgend jaar?
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  3. #3
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Oeps Ik loop iets vooruit op de feiten geloof ik Aangepast voor de goede orde...


    [Edit]

    Mhhh, het forum blijft 'm hernoemen naar .txt. Of Opera. Even renamen naar .pas en klaar is $Member[Username]
    Qui custodiet ipsos custodes

  4. #4
    Ziet er goed uit. Die DoFoundFile is wel een stuk netter. Yay PsychoMark, boo me
    1+1=b

  5. #5
    Senior Member pderuiter's Avatar
    Join Date
    Sep 2002
    Location
    Brunssum
    Posts
    166
    Maar volgens mij werkt de optie DirsOnly niet goed. Dit gebeurt als je alleen een directory ingeeft, zonder iets achter de backslash te zetten.
    variabele 'Mask' wordt dan '*.*', en een directory voldoet daar niet aan. (die is '*')
    war doesnt determine who's right.... just who's left.

  6. #6
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    *.* pakt alles, inclusief directories... weet je zeker dat 't niet werkt (als in: heb je het getest), of is dit een echte "volgens mij"? In het eerste geval moet ik er namelijk ook eens naar kijken dan
    Qui custodiet ipsos custodes

  7. #7
    Senior Member pderuiter's Avatar
    Join Date
    Sep 2002
    Location
    Brunssum
    Posts
    166
    ik heb het getest ja.
    Het werkt wel als je een sterretje in het zoekpad opneemt. (c:\* werkt wel, maar c:\ niet)

    De logische 'oplossing' zou zijn om bij het bepalen van het mask te kijken of dirsOnly in de opties staat en dan de mask '*' te maken ipv '*.*'

    p.s. ik gebruik D7 ent
    war doesnt determine who's right.... just who's left.

  8. #8
    Je hebt gelijk. Het is overigens niet alleen voor directories als je alleen naar directories zoekt, maar ook alle files zonder extentie worden blijkbaar niet gevonden. Het probleem zit in de MatchesMask functie (die wordt gebruikt in WalkDir). Deze door Delphi aangedragen mask checker is eigenlijk iets te complex en gaat niet goed om met bestandsnamen zonder extentie. Hij verwacht namelijk altijd een punt, en een bestandsnaam zonder extentie heeft die natuurlijk niet.

    Ik zal zoeken naar een oplossing. Ideeën zijn welkom.
    Last edited by GolezTrol; 05-Jan-04 at 21:58.
    1+1=b

  9. #9
    Senior Member pderuiter's Avatar
    Join Date
    Sep 2002
    Location
    Brunssum
    Posts
    166
    ipv *.* alleen *
    Volgens mij werkt het dan wel. Dit vindt in ieder geval directories en bestanden met en zonder extensie.
    war doesnt determine who's right.... just who's left.

  10. #10
    Senior Member pderuiter's Avatar
    Join Date
    Sep 2002
    Location
    Brunssum
    Posts
    166
    Nog iets wat me net opviel: In jou implementatie ben je een FindClose vergeten.
    war doesnt determine who's right.... just who's left.

  11. #11
    *.* vervangen door * is maar een halve oplossing. De mask kan bijvoorbeeld ook koe.* zijn. Alle bestanden die koe heten en een extentie hebben worden dan gevonden. Het strippen van .* is dan geen optie, omdat dan alleen de bestanden zonder extentie worden gevonden. De enige oplossing lijkt me om twee keer MatchesMask uit te voeren, 1 keer met en 1 keer zonder .* erachter. En behalve .* kun je ook nog 1 of meerdere vraagtekens als extentie hebben. Het beste is dus (denk ik) om een eigen MatchesMask te maken die de punt als optioneel teken ziet wanneer er geen tekens meer achter komen.

    Er staat overigens wel degelijk FindClose in de code.
    1+1=b

  12. #12
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    waarom? lijkt me toch dat je niet ook nog eens wilt filteren op directories die koe heten ( en alleen in die directories zoeken? )
    !

  13. #13
    Dat is al een optie! Hij gaat in feite alle files zoeken en zelf de mask toepassen, dus de FindFirst krijgt altijd *.* mee. Eén van de opties die meegegeven kunnen worden is soUseMaskForDirs. Deze optie bepaalt of de mask wordt toegepast op alleen de files of ook de directories.

    [edit]
    Daarbij gaat het helemaal niet om het onderscheid tussen directories en files. Zowel files als directories kunnen een extentie hebben of niet. De Findxxxx routines maken geen onderscheid.
    1+1=b

  14. #14
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Ah sorry. Ik ken de code van NLDFileSearch niet zo goed Gebruik hem wel zeer regelmatig maar echt de code heb ik nooit bekeken, het komt er toch op neer dat er met FindFirst, FindNext en FindClose gewerkt wordt
    !

  15. #15
    Senior Member pderuiter's Avatar
    Join Date
    Sep 2002
    Location
    Brunssum
    Posts
    166
    de findclose is ook niet vergeten in jou code maar in die van mark
    war doesnt determine who's right.... just who's left.

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. NLDCalendar Versie History
    By eagle00789 in forum NLDCalendar
    Replies: 0
    Last Post: 20-Jul-04, 00:53
  2. van versie 5 naar 7 of 8?
    By Mani in forum Algemeen
    Replies: 1
    Last Post: 23-Feb-04, 13:36
  3. Kiezen upgrade versie Delphi6
    By Nekes in forum Algemeen
    Replies: 2
    Last Post: 25-Nov-01, 21:07

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •