A fájlkezelés alapjai (titkosítás Caesar kóddal) A titkosírások egy része ahogy a Caesar kód is betűkeverésen alapul, azaz bizonyos betűcsoportok helyett más betűket, betűcsoportokat vagy jeleket használnak. Az így készült titkos szöveg feltörését az írásjelek és a szóközök használata jelentősen megkönnyíti. Részben ezért, részben kényelmi okokból a továbbiakban feltételezzük, hogy a nyílt szöveg csupán az angol abc nagybetűit tartalmazza. Ezek a karakterek a kódtáblában a 65-90 kódot kapták. Visual Basicben egy Character típusú változó kódját az AscW() függvény adja meg. Így ha a ch változó értéke egy angol nagybetű, akkor a sorszámát (0 -tól kezdve!) az AscW(ch)-65 kifejezés adja. Program első változata Programunk első változatában a nyílt szöveget egy szövegmező (txtnyílt), az eltolás mértékét pedig egy numerikus léptető segítségével (nupeltolás) adhatjuk meg. A titkos szöveg az OK (cbok) gombra kattintás után egy szövegmezőben (txttitkos) áll elő. A programkódot tehát az cbok_click eseményhez rendeljük. A megengedett abc 26 karaktert tartalmaz, ezeket körkörösen úgy képzeljük el, mintha a Z után az A betű következni. Az abc terjedelmét az abc nevű konstansba vesszük fel, míg a vezérlők által beolvasott adatokat az eltolás, illetve a nyílt nevű változóba. Private Sub cbok_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cbok.click Const abece As Integer = 26 Dim Eltolas As Integer = Val(nupEltolas.Value) Dim nyilt As String = txtnyilt.text Programunk gerincét a nyílt szöveg karaktereinek egyenkénti kiolvasása és elcsúsztatása adja, ehhez természetesen végig kell mennünk a nyílt szövegen. Az éppen vizsgált karakter kódja legyen pl. betű, a ciklusváltozó i, a titkosított szöveg karaktereit pedig a titkos sztringbe fogjuk összegyűjteni: Dim betu, i As Integer Dim titkos As String = "" OK Button nupeltolás NumericUpDown Maximum = 25 Minimum = -25 Value = 3 txtnyílt TextBox MultiLine = True txttitkos TextBox MultiLine = True
Maga az eljárás egyszerű: a nyílt szöveg karaktereit egyenként kiolvassuk, majd hozzáadjuk az eltolás értékét: For i = 0 To nyilt.length - 1 betu = AscW(nyilt.Chars(i)) betu = betu + Eltolas Ha a kapott kód túllép a maximális értéken ( Z -n), vagy kisebb lesz a minimális értéknél ( A ), akkor az abc konstans kivonásával vagy hozzáadásával biztosítjuk a körkörösséget. Végül a kapott karaktert hozzáadjuk a titkos szöveghez, és a ciklusból való kilépés után átmásoljuk a txttitkos szövegmezőbe: If betu > AscW("Z") Then betu = betu - abece If betu < AscW("A") Then betu = betu + abece titkos = titkos & ChrW(betu) Next txttitkos.text = titkos Célszerű programunkat úgy továbbfejleszteni, hogy az adatokat akár fájlból is beolvashassuk, és a titkosított szöveget akár fájlba is menthessük. Ehhez az űrlapra vegyünk fel két gombot a következő ábrán látható módon, és mind nevük, mind feliratuk legyen Beolvasás, illetve Mentés. A fájlkezelés alapvetően két részből áll. Első lépésben kiválasztjuk a fájlt a háttértáron, második lépésben pedig beolvassuk vagy kiírjuk az adott fájlba az adatokat.
Egy fájl kiválasztása az OpenFileDialog, SaveFileDialog segítségével Fejlesztő környezetünk sok kész párbeszédpanelt biztosít a programozónak a mindennapos feladatok elvégzéséhez. Ezek egyrészt lehetővé teszik, hogy a felhasználó az egyes funkciók elvégzését könnyebben elsajátíthassa, másfelől megkönnyítik a programozók feladatát is. Ilyen kész párbeszédpanel az OpenFileDialog, amely fájl megnyitásakor lehetővé teszi, hogy a felhasználó kiválasszon egy fájlt a fájlrendszerből. A tényleges megnyitást már a programozónak kell megoldania. Fájlok mentésekor hasonló elven működik a SaveFileDialog. Beolvasás Botton Mentés Button ofd OpenFileDialog Filter=Szöveges *.txt Minden fájl *.* FilterIndex=1 sfd SaveFileDialog DefaultExt=txt Keressük meg ezt a két vezérlőt az eszközkészlet Dialogs csoportjában, és két-két kattintással adjuk hozzá űrlapunkhoz! Mivel ezek a vezérlők is csak futás közben jelennek meg, így az alsó szürke sávra kerülnek. Állítsuk be a vezérlők tulajdonságait a fenti ábrának megfelelően! Az OpenFileDialog esetében a Filter tulajdonság a következőt jelenti. Fájl meg nyitásakor a felhasználó az ablak alsó részén a Fájltípus mellett kiválaszthatja a listázandó fájlok típusát: A Szöveges *.txt Minden fájl *.* beállítás esetén a listában két elem jelenik meg a Szöveges és a Minden fájl. Az első a txt kiterjesztésű fájlokat listázza, míg a második az összes fájlt megjeleníti. Ha a lista több elemű, akkor a FilterIndex adja meg, hogy hányadik törlődik be a dialógusdoboz indításakor (számozás 1-től indul).
OpenFileDialog és a SaveFileDialog főbb tulajdonságai Tulajdonság InitialDirectory Filter Filter DefaultExt Title Leírás A megjelenítendő mappa, ahogyan a böngészés indul. Szűrőfeltétel a listázandó fájlokra (több lehetőséggel). A szűrőlista alapértelmezett elemének megadása. Alapértelmezett kiterjesztés (mentéskor). A megjelenő dialógusdoboz címsora. Szöveges fájl beolvasása és mentése a My objektum segítségével A Visual Basicben a My objektum segítségével érhetjük el könnyen és egyszerűen számítógépünket. Segítségével például hozzáférhetünk a gépünkön lévő mappaszerkezethez is: egy szövegfájlt egyben beolvashatunk egy szövegdobozba, vagy kiírhatunk egy szövegdobozból. Példánkban a Beolvasás gomb kettős feladatot lát el. Egyrészt segítségével kiválaszthatjuk a beolvasandó szövegfájlt, másrészt ezt a fájlt ténylegesen be is olvassuk. A programkód a következő: Private Sub Beolvasas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbbeolvasas.click If ofd.showdialog = Windows.Forms.DialogResult.OK Then txtnyilt.text = _ My.Computer.FileSystem.ReadAllText(ofd.FileName) End Sub Az elágazás első sorában a ofd.showdialog megjeleníti a fájl kiválasztására szolgáló OpenFileDialogot, és átadja neki a vezérlést. Ha a felhasználó az OK gombra kattint, végrehajtódik az elágazás törzse: a ReadAllText metódus betölti a kiválasztott fájl tartalmát a txtnyíl szövegmezőbe. Hasonló módon működik a Mentés gomb is: ha a felhasználó az OK gombra kattint, létrejön az általa megadott nemű fájl (sfd.filename), és beleíródik a txttitkos szövegmező tartalma. A WriteAllText metódus harmadik paramétere ( False) azt adja meg, hogy létező fájl esetén hozzáfűzze-e a szöveget. Private Sub cbmentes_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cbmentes.click If sfd.showdialog() = Windows.Forms.DialogResult.OK Then My.Computer.FileSystem.WriteAllText(sfd.FileName, txttitkos.text, False) End Sub
A következő táblázat a My objektum főbb funkcióit foglalja össze: Objektum My.Application My.Computer My.Forms My.User My.WebServices Leírás A futó alkalmazással és a környezetével kapcsolatos információk elérése. A helyi géppel kapcsolatos információk lekérdezése. Segítségével akár a fájlszerkezetet is elérjük. Az aktuális projekt űrlapjainak elérése. Az aktuális felhasználóval kapcsolatos információk elérése. A projektünkhöz hozzáadott webszolgáltatások elérése. Feladat: Augustus Julius Caesar betűket 3 hellyel tolta el. Ezzel szemben Augustus csak egy hellyel, de az utolsó betű helyett nem A-t, hanem AA-t írt. Írjunk programot, amely ezzel az eljárással titkosít, illetve az így titkosított szöveget visszafejti! (Pl. az ASZTAL szó kódja BTAAUBM)