HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Állománykezelés Visual Basic-ben


Példaprogram letöltése

7150 bájt

Mellékelt példában annak járunk utána, hogy milyen lehetőségeink vannak arra, ha egy tetszőleges típusú adatot szeretnénk állományba írni, vagy a már kiírt adatainkat visszaolvasni.

A mellékelt példában megvalósított feladat a következő: a NumericUpDown1 komponensbe megadott számokat Integer típusként kiírjuk egy tmp.dat állományba az első nyomógomb lenyomásakor. A kiírást úgy tesszük meg, hogy ha már van értékes adat az állományban, akkor az új számot mindig az állomány végére írjuk. A második gomb lenyomásakor a kiírt adatokat sorban beolvassuk, majd megjelenítjük ezeket a számokat egy ListBox komponensben, ahol minden számot egy-egy sorába írunk be.
Nézzük, miként történik a kiírás. Első lépésként megpróbáljuk megnyitni az állományt, ha az még nem létezne, akkor rögtön létrehozunk egyet. Ehhez a File osztály Open függvényét használjuk. Itt első paraméterként a megnyitandó, illetve a létrehozandó állomány nevét kell megadnunk. Második paraméterként pedig a FileMode felsorolt típus elemei közül választhatunk egyet. Az OpenOrCreate a megnyitást, vagy nem létezés esetén a létrehozást takarja. Az állományt minden esetben a programunk EXE-je mellett keressük, így annak elérési útját az Application osztályt StartupPath property-jéből vehetjük.
Állomány nyitás után az Open függvény egy Stream osztályt ad vissza, melyet egy ilyen típusú változóba eltárolunk.
Ahhoz, hogy íráskor mindig a legutolsó érték után írjuk a következőt, minden esetben az állomány végére kell állnunk még az írás megkezdése előtt. Ehhez a Stream osztály Seek függvényét használhatjuk. Ezzel mozoghatunk az állományon belül egy tetszőleges helyre. Itt első paraméterként azt kell megadnunk, hogy hány bájttal szeretnénk mozgatni az aktuális pozíciót. A második paraméter azt mondja meg, hogy ez az elmozdulás honnan történjen. Itt három lehetőség közül választhatunk:
  • Begin – az állomány elejétől számítva
  • Current – az aktuális pozíciótól számítva
  • End– az állomány végétől számítva.
Miután az állomány végére álltunk, létrehozunk egy változót a BirnaryWriter osztályból. Ennek az osztálynak használatával igen egyszerűen lehetőségünk nyílik különféle típusú egyszerű adatok bináris formában történő írására. Így például Integer, String, Boolean, Char, stb. típusú adatainkat egyszerűen írhatjuk ki. A létrehozáskor a konstruktorban a már meglévő Stream osztályt adjuk át. Ezt felhasználva lesz képes a BinaryWriter arra, hogy írjon az állományba.
A kiíráshoz nincs más teendőnk, mint a Write függvényt használni, melynek 17 különféle változata létezik a különböző típusú adatok kiírásához. Mellékelt példában mi most a NumericUpDown1 komponens Value property-jének értékét adjuk át.
Kiírás után már csak annyi teendőnk van, hogy lezárjuk a megnyitott állományt a Stream osztály Close függvényének hívásával.
Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim st As Stream = File.Open(Application.StartupPath + "\\tmp.dat", FileMode.OpenOrCreate)
  st.Seek(0, SeekOrigin.End)
  Dim bw As BinaryWriter = New BinaryWriter(st)
  bw.Write(CType(NumericUpDown1.Value, Integer))
  st.Close()
End Sub
A létrehozott állomány beolvasását szintén egy Stream osztály létrehozásával kezdjük, a File osztály Open függvényével. Adatok olvasásához most viszont egy BinaryReader osztályt használunk. Ennek konstruktoránál szintén a már meglévő Stream osztályt kell átadnunk. Az adatok kiolvasásához egy ciklust készítünk, mellyel végigolvashatjuk az állományunk összes számát és azokat megjeleníthetjük a ListBox komponensünkben. A ciklusváltozót négyesével növeljük, mivel egy-egy eltárolt szám is négy bájt hosszú. A ciklus így addig megy ahány bájt van az állományban. Ennek értékét a Stream osztály Length property-jéből tudhatjuk meg.
Az egyes számok kiolvasásához a BinaryReader osztály ReadInt32 függvényét használjuk, mely Integer típusként adja vissza az eltárolt számot. Mivel a ReadInt32 annyi bájttal lépteti az állomány aktuális pozícióját, amennyit olvas, így minden olvasás után a következő int számon fogunk állni, ezért külön léptetésre nincs szükségünk a ciklusmagban.
Olvasás után ismét csak annyi a teendőnk, hogy lezárjuk az állományt a Close függvénnyel.
Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  Try
    Dim st As Stream = File.Open(Application.StartupPath + "\\tmp.dat", FileMode.Open)
    Dim br As BinaryReader = New BinaryReader(st)
    ListBox1.Items.Clear()
    Dim i As Integer
    For i = 0 To st.Length - 1 Step 4
      ListBox1.Items.Add(br.ReadInt32().ToString())
    Next
    st.Close()
  Catch ex As Exception
    MessageBox.Show(ex.Message.ToString())
  End Try
End Sub

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |