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)
NEXTParempi 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.