Kirjoittaja: Antti Laaksonen
Kirjoitettu: 07.04.2002 – 07.04.2002
Tagit: ohjelmointitavat, koodi näytille, vinkki, DOS
QBasicissa ei ole valmiita komentoja tiedoston koon, luontipäivän tai luontiajan selvittämiselle. Niiden selville saaminen onnistuu kuitenkin melko helposti DOSin dir-listauksesta tutkimalla.
Tässä esitettynä on neljää aliohjelmaa, jotka kertovat tiedoston koon, luontipäivän ja luontiajan sekä sen, onko tiedostoa olemassa.
Kokeiluissani huomasin, että vaikka Windows 2000:n DOS kirjoittaa dir-komennossa tiedostojen tiedot käänteisessä järjestyksessä aiempiin versioihin nähden, QBasicista SHELL-komennolla ajettaessa dir-listaus tulostuu kuitenkin taianomaisesti vanhojen DOSien kaltaisesti. Hyvä niin, muuten ohjelma ei toimisi uusilla Windowseilla.
Pääohjelma
'Pari sanaa aliohjelmista: ' 'TiedostoOlemassa tutkii tiedoston olemassaolon komennon DIR avulla. 'Jos tiedostoa ei ole olemassa, DIR(tiedosto) palauttaa tyhjän ' 'Muut aliohjelmat tekevät DOSin DIR-listauksen väliaikaistiedostoon 'ja lukevat sieltä tiedoston tietoja CLS tiedosto$ = "c:\autoexec.bat" 'tähän tutkittava tiedosto IF TiedostoOlemassa(tiedosto$) THEN PRINT "Tiedoston koko:"; TiedostonKoko(tiedosto$); "tavua" PRINT "Tiedoston päivä:"; TiedostonPaiva(tiedosto$) PRINT "Tiedoston aika:"; TiedostonAika(tiedosto$) ELSE PRINT "Tiedostoa ei ole olemassa!" END IF
Aliohjelmat
FUNCTION TiedostonAika$ (tiedosto$) SHELL "dir " + tiedosto$ + ">tied.tmp" PRINT ut$ OPEN "tied.tmp" FOR INPUT AS #1 DO UNTIL EOF(1) LINE INPUT #1, rivi$ IF LEFT$(rivi$, 1) <> " " THEN TiedostonAika = MID$(rivi$, 35, 5) END IF LOOP CLOSE #1 KILL "tied.tmp" END FUNCTION FUNCTION TiedostonKoko& (tiedosto$) SHELL "dir " + tiedosto$ + ">tied.tmp" PRINT ut$ OPEN "tied.tmp" FOR INPUT AS #1 DO UNTIL EOF(1) LINE INPUT #1, rivi$ IF LEFT$(rivi$, 1) <> " " THEN TiedostonKoko = VAL(MID$(rivi$, 14, 9)) END IF LOOP CLOSE #1 KILL "tied.tmp" END FUNCTION FUNCTION TiedostonPaiva$ (tiedosto$) SHELL "dir " + tiedosto$ + ">tied.tmp" PRINT ut$ OPEN "tied.tmp" FOR INPUT AS #1 DO UNTIL EOF(1) LINE INPUT #1, rivi$ IF LEFT$(rivi$, 1) <> " " THEN TiedostonPaiva = MID$(rivi$, 24, 8) END IF LOOP CLOSE #1 KILL "tied.tmp" END FUNCTION FUNCTION TiedostoOlemassa% (tiedosto$) x$ = DIR$(tiedosto$) IF x$ = "" THEN TiedostoOlemassa = 0 ELSE TiedostoOlemassa = 1 END IF END FUNCTION
Tuosta oli minulle hyötyä,kiitos!
Samoin! (Mutta en vielä ehdi lisätä mun omiin ohjelmiin)
Heippa!
'VB(S) style FileExists funktio QBasic:lle DECLARE FUNCTION FileExists% (kokopolku$) DIM SHARED xerr AS INTEGER DIM SHARED TRUE AS LONG DIM SHARED FALSE AS LONG TRUE = -1: FALSE = 0 'Testi CLS kokopolku$ = "C:\testi.txt" IF FileExists(kokopolku$) = TRUE THEN 'tee jotain... ELSE PRINT "TIEDOSTOA EI LÖYDY!" END IF SYSTEM FileOpenError: xerr = ERR RESUME NEXT FUNCTION FileExists% (kokopolku$) xerr = 0 ON ERROR GOTO FileOpenError OPEN kokopolku$ FOR INPUT AS #1 CLOSE #1 IF xerr <> 0 THEN FileExists% = FALSE ELSE FileExists% = TRUE END IF END FUNCTION