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 End If If betu < AscW("A") Then betu = betu + abece End If 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 If 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 If 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)