QBasicissa on kyllä hyvät välineet hakemiston tiedostojen tutkimiseen - mutta ei lainkaan välinettä itse hakemistojen selvittämiseen. Konekielisiin ohjelmiin ei kuitenkaan tarvitse turvautua, sillä apuna voidaan käyttää vanhaa kunnon DIR-listausta. Tämä ohjelma lukee halutun hakemiston (tai levyaseman) kaikki (ali)hakemistot taulukkoon ja tulostaa ne näytölle.
hak$ = "C:" 'hakemisto, jonka alihakemistot näytetään DIM hakemistot(255) AS STRING * 12 'suoritetaan dir-komento halutulle hakemistolle '/ad-valitsimen kanssa, joka näyttää pelkät hakemistot 'Listaus lajitellaan samantien, minkä jälkeen se ohjataan 'hake.dat-tiedostoon SHELL "dir " + hak$ + "/ad|sort>hake.dat" CLS OPEN "hake.dat" FOR INPUT AS #1 PRINT hak$; " alihakemistot" + CHR$(13) DO UNTIL EOF(1) INPUT #1, hake$ 'onko rivillä hakemisto IF INSTR(hake$, "<DIR>") > 0 AND LEFT$(hake$, 1) <> "." THEN k% = k% + 1 hakemistot(k%) = hake$ END IF LOOP CLOSE #1 hakemaara% = k% KILL "hake.dat" 'tiedosto tuhotaan turhana 'tulostetaan hakemistojen nimet näytölle FOR i = 1 TO hakemaara% PRINT hakemistot(i) NEXT
Parempi ja nopeampi tapa saada hakemisto selville on käyttää seuraavaa koodia:
----
InRegs.AX = &H1900
CALL INTERRUPTX(&H21, InRegs, OutRegs)
Tunnus% = OutRegs.AX MOD 256
Hakemisto$ = STRING$(64, CHR$(0))
InRegs.AX = &H4700
InRegs.DX = Tunnus% + 1
InRegs.DS = VARSEG(Hakemisto$)
InRegs.SI = SADD(Hakemisto$)
CALL INTERRUPTX(&H21, InRegs, OutRegs)
Temp$ = CHR$(Tunnus% + 64) + ":\"
Temp$ = Temp$ + LEFT$(Hakemisto$, INSTR(Hakemisto$, CHR$(0))-1)
Temp$ = Temp$ + "\"
------
En testannut sitä tässä, laitoin suoraan ulkomuistista. Pitäisi toimia :)
Kooditägit?
öh...
Hyvä koodi, tämä tulee tarpeeseen.
Tiedosto vie vähemmän tilaa, jos käyttää /w -valitsinta (jolloin hakemistot on ympäröity hakasulkeilla []), mutta silloin koodia pitää muuttaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.