mandag 10. september 2007

Mandag 10/9: Lesing fra fil

Temperaturer lages (med Notepad). Oppdaterte temperaturer trengs fra tre "steder" i koden, så filen (med temperaturene) leses fra ny prosedyre HentTemperaturer() som jeg lager SELV.
  Imports System.IO
  ...
  Sub Private hentTemperaturer()
    Dim readerTemp As StreamReader = File.OpenText("c:\temperaturer.txt")
      ' filen har tre linjer
    Dim strInn as String
    strInn = readerTemp.readline() ' henter linje 1 "Molde 8"
    strInn = readerTemp.readline() ' henter linje 2 "Tingvoll 12"
    strInn = readerTemp.readline() ' henter linje 3 "Vigra 9"
    strInn = readerTemp.readline() ' gir "Nothing" 
    readerTemp.close()
  End Sub
OpenText() av ukjent fil gir RUNTIME-feil (programmereren kan ikke oppdage dette!). ReadLine() gir "Nothing" (ikke runtimefeil) hvis det ikke er mer å lese. Prosedyren kalles ved hendelsene form.Load (programmet starter), button1.click (bruker vil ha oppdaterte temperaturer) og timer1.tick (som vi satte til hvert 1000de millisekund).

Samtidighetsproblematikk: Hvis mitt program har filen åpen (for lesing) bør ikke andre (notepad) åpne den for skriving. Likens: Hvis andre har åpnet filen (for skriving), bør ikke mitt program få åpne filen (for lesing). Slik blokkering gir feilmelding, men er vanlig, for å sikre at leserne ikke er forvirret hva angår det EGENTLIGE innholdet i filen. For å redusere sjansen for blokkering må lesere og skrivere av delte filer åpne bare hvis absolutt nødvendig (en MÅ ha siste versjon), samt minimalisere tiden filen holdes åpen. Merk: Det er greit at flere lesere har samme fil åpen samtidig!

Ingen kommentarer: