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 FUNCTIONTuosta 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