Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

1 Filer - intro Data-hierarki Filer og strømme (eng.: streams) af bytes Klasserne File og Directory Oprettelse af sekventiel tekstfil Læsning af data fra.

Lignende præsentationer


Præsentationer af emnet: "1 Filer - intro Data-hierarki Filer og strømme (eng.: streams) af bytes Klasserne File og Directory Oprettelse af sekventiel tekstfil Læsning af data fra."— Præsentationens transcript:

1 1 Filer - intro Data-hierarki Filer og strømme (eng.: streams) af bytes Klasserne File og Directory Oprettelse af sekventiel tekstfil Læsning af data fra sekventiel tekstfil Serialization & deserialization (kun overordnet) Steen Jensen, efterår 2013

2  Variable og arrays tilbyder temporær opbevaring af data  Filer & databaser tilbyder varig / persistent opbevaring af data 2

3  For at kunne hente specifikke records vælges en record key i hver record  En typisk måde at organisere filer på er som en sekventiel fil sorteret efter record key 3

4  C# ser hver fil som en strøm af bytes  En end-of-file marker angiver afslutningen på filen 4  Namespace System.IO inkluderer stream classes såsom:  StreamReader (tekst input fra fil)  StreamWriter (tekst output til fil)

5  Klasserne File og Directory giver mulighed for at manipulere med filer og mapper 5

6 6

7 7  Eksemplet udskriver enten indholdet af en tekstfil eller lister filnavne i en mappe, afhængig af, om der indtastes et filnavn eller et mappenavn  Eksemplet bruger GUI (gennemgås først i kap. 14), men her er nogle få bemærkninger:  Linje 10: partial class - se s. 559 i bogen (= en klasse opdelt i flere filer, der samles til en enkelt klasse af compileren)  Linje 19: eventhandler til tekstboks – se s. 562 i bogen

8 8  Linje 19-75: metoden inputTextBox_KeyDown kaldes, hver gang der indtastes et tegn i tekstboksen  Linje 22: undersøger, om brugeren har trykket Enter  Hvis Enter, undersøges om der er indtastet et filnavn (linje 28)  Hvis filnavn indtastet, udskrives indholdet af tekstfilen  Hvis ikke filnavn indtastet, undersøges, om der er indtastet et mappenavn  Hvis mappenavn indtastet, udskrives alle filnavne i mappen  Hvis ikke mappenavn indtastet, udskrives en fejlmeddelelse  Hvis ikke Enter, gøres ingenting  Linje 38: klassen StreamReader benyttes til at læse fra tekstfil  Linje 40: metode ReadToEnd læser hele indholdet af tekstfil som en streng  Linje 59: metode GetDirectories henter indhold af mappe som et array

9 9  Eksemplet Searching Directories with LINQ s. 715n – 720ø  Eksemplet benytter LINQ (kan læses i kap. 9)

10 10  Eksemplet kan oprette records med bankoplysninger (kontonr, fornavn, eftrnavn, saldo) i en tekstfil  Eksemplet benytter tre klasser – BankUIForm (GUI, fig. 17.7), Record (til opbevaring af bank-record, fig. 17.8), CreateFileForm (skriver til tekstfil, fig. 17.9)  Hovedvægt vil blive lagt på fig. 17.8 + 17.9 – i stedet for GUI kan simple WriteLine + ReadLine benyttes  Figur 17.8 linje 21-24 + 27-34: overloaded constructor til henholdsvis startværdier og overførte parameterværdier

11 11  Figur 17.9:  Linje 12: klassen StreamWriter benyttes til at skrive til tekstfil  Linje 25: filnavnet gemmes i variablen fileName  Linje 44-56: try – opret nyt objekt af typen FileStream og angiv FileMode til Open eller Create, og FileAccess til Write  Linje 58-63: catch – IOException  Linje 69-126: eventhandler til enter-knap  Linje 75: opret objekt af klassen Record  Linje 100-102 try – skriv record i tekstfil med metoden WriteLine  Linje 112-116: catch - IOException  Linje 118-122: catch – FormatException  Linje 129-148: eventhandler til exit-knap  Linje 134-138: try - luk tekstfil med metoden Close  Linje 140-144: catch – IOException  Linje 147: afbryd app med metoden Exit

12 12  Eksemplet læser tekstfilen oprettet i eksempel 17.7-17.9  Hovedvægt vil blive lagt på filbehandling og ikke så meget GUI  Linje 12: klassen StreamReader benyttes til at læse fra tekstfil  Linje 25: filnavnet gemmes i variablen fileName  Linje 44-55: try – opret nyt objekt af typen FileStream og angiv FileMode til Open, og FileAccess til Read. Der oprettes et nyt objekt af typen StreamReader  Linje 56-61: catch – IOException  Linje 67-105: eventhandler til next-knap  Linje 69-99 try – læs næste record fra tekstfil med metoden ReadLine eller luk tekstfil (ved EOF) med metoden Close  Linje 100-104: catch - IOException

13 13  Afsnit 17.7 Case Study: Credit Inquiry Program s. 733n – 739m  Eksemplet benytter reposition af file-position pointer

14 14  Gennemgås kun overordnet her  Nogle gange ville det være nemmere at læse eller skrive hele objekter  C# indeholder en mekanisme, der hedder object serialization, som betyder, at et objekt repræsenteres som en sekvens af bytes, som inkluderer både objektets data og typen af data gemt i objektet  Efter et serialized objekt er blevet skrevet til en fil, kan det læses fra filen og gøres deserialized – kan sammenligned med kryptering/dekryptering  Namespace System.Runtime.Serialization.Formatters.Binary indeholder klassen BinaryFormatter med følgende metoder:  Serialize – kan skrive et objekt som et serialized objekt  Deserialize – læser repræsentationen fra fil og rekonstruerer det originale objekt  Læs/studer efter behov selv fig. 17.13 s. 740 + fig. 17.15 s. 745

15  Prøv at besvare øvelse 17.1 + 17.2 s. 750 uden at se svaret  Check derefter dine svar op imod svarene s. 751 15

16  Resten af dagen + fortsæt hjemme: 1. Ex. 17.3 s. 751 2. Ex. 17.8 s. 752 (NB! I stedet for GUI kan simple WriteLine & ReadLine benyttes 3. Implementer brug af filer i Spejdersystemet (til katalogerne) 16


Download ppt "1 Filer - intro Data-hierarki Filer og strømme (eng.: streams) af bytes Klasserne File og Directory Oprettelse af sekventiel tekstfil Læsning af data fra."

Lignende præsentationer


Annoncer fra Google