Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Hakemistojen selvittäminen

Antti Laaksonen [06.04.2002 10:52:29]

#

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

mikarim [14.09.2003 16:44:17]

#

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 :)

moptim [26.10.2006 14:53:41]

#

Kooditägit?

gamehouse [24.05.2007 16:45:06]

#

öh...

Juhko [17.11.2008 21:09:39]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta