Kirjautuminen

Haku

Tehtävät

Koodit: QB: Tiedoston tiedot

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

Kommentit

Jesoft [20.04.2003 16:08:50]

#

Tuosta oli minulle hyötyä,kiitos!

InvalidCo [31.05.2003 22:24:50]

#

Samoin! (Mutta en vielä ehdi lisätä mun omiin ohjelmiin)

neau33 [13.02.2009 13:01:57]

#

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

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta